Golang 函数中可以嵌套类吗?
Golang 允许在函数中嵌套结构体,但不允许在其他函数中嵌套函数(不包括拉姆达函数)。这种限制引发了一个问题:是否可以在 Golang 中的函数内定义嵌套类。
考虑以下示例:
<code class="go">func f() { // Nested struct Cls within f type Cls struct { // ... } // Attempt to bind foo to Cls fails func (c *Cls) foo() { // ... } }</code>
在这种情况下,尝试将 foo 函数绑定到嵌套类 Cls 将失败。这可能看起来令人惊讶,因为函数内部的类并没有减少。
函数文字来救援
尽管 Golang 中不允许在其他函数中嵌套函数,但是使用函数文字的解决方法:
<code class="go">func f() { foo := func(s string) { fmt.Println(s) } foo("Hello World!") }</code>
这里,我们创建一个类型为 foo 的变量函数,它在另一个函数 f 中声明。调用“外部”函数 f 输出:“Hello World!”正如预期的那样。
这个解决方案允许我们实现与函数内的嵌套类类似的行为,尽管使用不同的机制。
以上是Golang 函数中可以存在嵌套类吗?的详细内容。更多信息请关注PHP中文网其他相关文章!