Golang 嵌套 class 内部函数

Golang nested class inside function

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

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

所以感觉class内部功能弱化有点奇怪

有什么提示吗?

实际上,如果要声明函数 withwithout a receiver 并不重要:Go 中的嵌套函数不是允许。

尽管您可以使用 Function literals 实现类似这样的效果:

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

    foo("Hello World!")
}

这里我们创建了一个变量foo,它有一个函数类型,并在另一个函数f 中声明。调用“外部”函数 f 输出:"Hello World!" 如预期。

Go Playground 上试用。

我对 icza 的回答投了赞成票,但只是稍微扩展一下,这里是他的示例,稍作修改,表明在外部函数中定义的变量对内部函数可见:

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

        foo()
    }

    func main() {
        f("Hello, World!\n")
    }