go - 使用结构成员作为另一个结构中的成员

标签 go struct embedding

type (
    A struct {
        a string
    }

    B struct {
        b *A.a
    }
)

我收到这个错误:

A.a undefined (type A has no method a)

我是不是漏掉了什么?还是 Go 中不允许这样做?

最佳答案

定义结构字段时,必须指定 its name and its type就像你对 struct A.a 所做的那样。但是在结构 B 中:

b *A.a

*A.a 不是类型。

您不能将 struct 的字段嵌入到另一个结构中。请注意,您可以通过省略 name 部分来将 complete 结构嵌入到另一个结构中,如下所示:

type (
    A struct {
        a string
    }

    B struct {
        A
    }
)

结果是 A 类型的所有字段和方法也将成为结构 B 的成员。如果您需要 B 的嵌入结构 A,您可以通过引用它作为类型名称来访问它:

var b B
fmt.Println(b.A)

您可以做的另一件事是在 B 中有一个字段,它是一个指针,它指向类型为 A现有值的字段:

B struct {
    ap *string
}

a := A{a:"test"}
b := B{ap:&a.a} // B.ap will point to a.a

fmt.Println(*b.ap) // Prints "test"

关于go - 使用结构成员作为另一个结构中的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29598131/

相关文章:

javascript - 嵌入 Twitch 播放器可以在 fiddle 中运行,但不能在本地 html 文件中运行

sql-server - 使用GORM在同一张表上设置两个外键时,MS-SQL服务器引发错误

go - 如何写一个高效的 Go 内置函数拷贝实现?

Swift 3 单元测试抛出编译错误 "Cannot convert value ' Type' to 'Type' "

c - 如何从C语言结构中读取值

keras - 在不使用嵌入的情况下在 keras 中屏蔽 LSTM 中的零输入

go - 将 null 分配给 JSON 字段而不是空字符串

go - 在 Go 中实现信号量的最佳方式是什么

sqlite - 从sqlite3数据库和模型struct标记读取表时出现问题