一尘不染

Golang内部嵌套类的功能

go

Go支持在函数内部嵌套结构,但除了lambda之外没有嵌套函数,这是否意味着无法在函数内部定义嵌套类?

func f() {
    // nested struct Cls inside f
    type Cls struct {
    ...
    }
    // try bounding foo to Cls but fail
    func (c *Cls) foo() {
    ...
    }
}

因此,类在函数内部被削弱感到有点奇怪。

有什么提示吗?


阅读 188

收藏
2020-07-02

共1个答案

一尘不染

实际上,无论您要声明 带有 接收器还是 带有接收器的函数都没有关系:不允许在Go中嵌套函数。

尽管您可以使用函数文字来实现以下目的:

func f() {
    foo := func(s string) {
        fmt.Println(s)
    }

    foo("Hello World!")
}

在这里,我们创建了一个foo具有函数类型的变量,并将其分配给另一个函数f。调用“外部”函数f输出:"Hello World!"符合预期。

Go Playground上尝试一下。

2020-07-02