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内部功能弱化有点奇怪
有什么提示吗?
实际上,如果要声明函数 with 或 without 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")
}
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内部功能弱化有点奇怪
有什么提示吗?
实际上,如果要声明函数 with 或 without 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")
}