Go中的匿名结构可以有方法吗?

7uzetpgm  于 2023-11-14  发布在  Go
关注(0)|答案(1)|浏览(83)
var anonymousStruct = &struct {
    Value int
    Test  func()
}{
    Test: func() {
        fmt.Println(anonymousStruct.Value)
    },
}

字符串
查看代码时,我在第6行遇到了一个问题:函数“Test”无法访问参数“Value”。是否有一种方法可以让函数访问“Value”,而无需再次将其作为参数传递,类似于“anonymousStruct.Test(anonymousStruct.Value)"?换句话说,在Go中,匿名结构体可以拥有方法而不是函数吗?感谢您的指导。

eh57zj3b

eh57zj3b1#

不能将方法声明为匿名结构,因为方法声明只能包含命名类型(作为接收器)。
除此之外,如果匿名结构嵌入了具有方法的类型(它们会被提升),则它们可以具有方法。
在你的例子中,你不能在复合文字中引用anonymousStruct变量,因为变量只有在声明之后(复合文字之后)才在作用域中。参见Spec:Declarations and scope; example:Define a recursive function within a function in Go.
例如,你可以在变量声明之后初始化函数字段:

var anonymousStruct = &struct {
    Value int
    Test  func()
}{Value: 3}

anonymousStruct.Test = func() {
    fmt.Println(anonymousStruct.Value)
}

anonymousStruct.Test()

字符串
这将输出(在Go Playground上尝试):

3

相关问题