声明从不同结构继承的结构时:
type Base struct {
a string
b string
}
type Something struct {
Base
c string
}
然后调用指定继承值的值的函数会产生编译错误:
f(Something{
a: "letter a",
c: "letter c",
})
错误消息为:unknown Something field 'a' in struct literal
。
这对我来说似乎非常奇怪。这真的是预期的功能吗?
感谢您的帮助!
答案 0 :(得分:20)
Golang没有提供典型的继承概念。你在这里完成的是酝酿。
它不给外部结构提供内部结构的字段,而是允许外部结构访问内部结构的字段。
为了创建外部结构Something
,您需要提供包含内部结构Base
在你的情况下:
Something{Base: Base{a: "letter a"}, c: "letter c"}
答案 1 :(得分:6)
您需要显式创建类似
的Base字段f(Something{
Base: Base{a: "letter a"},
c: "letter c",
})
Go没有继承,只是组合。
答案 2 :(得分:3)
您还必须实际实例化嵌入式结构。只是因为你知道这不是技术上的继承,Go中没有这样的功能。它被称为嵌入。它只是将字段和方法从嵌入类型提升到嵌入器范围。所以无论如何,你试图做的复合文字实例化看起来像这样;
test | test name | test value