首页 >后端开发 >Golang >Go 函数中可以存在嵌套类吗?

Go 函数中可以存在嵌套类吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-04 14:26:01372浏览

Can Nested Classes Exist Within Functions in Go?

Go 中函数内的嵌套类:可能性和限制

在 Go 中,函数内的嵌套结构是允许的,但可以创建嵌套结构函数(除了 lambda 函数)受到限制。这就提出了一个问题:在函数中定义嵌套类真的不可能吗?

为了说明这一点,请考虑以下代码片段:

<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 的成员失败。考虑到嵌套结构提供的灵活性,这种限制可能看起来很不寻常。

但是,重要的是要认识到 Go 中的嵌套函数本质上是不允许的,无论函数是否有接收器。

为了规避这个限制,Go 提供了函数字面量,它允许在其他函数中声明函数,如下所示:

<code class="go">func f() {
    foo := func(s string) {
        fmt.Println(s)
    }

    foo("Hello World!")
}</code>

在这个例子中,在外部函数 f 中,我们创建了一个函数变量 foo 。该变量存储一个可以使用参数“Hello World!”调用的函数。当调用外部函数 f 时,“Hello World!”按预期打印。

这种方法利用函数文字,可以模拟函数内的嵌套类,尽管在某些限制内。

以上是Go 函数中可以存在嵌套类吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn