看看这个沙箱
声明从不同结构继承的结构时:
type Base struct {
a string
b string
}
type Something struct {
Base
c string
}
Run Code Online (Sandbox Code Playgroud)
然后调用指定继承值的值的函数会产生编译错误:
f(Something{
a: "letter a",
c: "letter c",
})
Run Code Online (Sandbox Code Playgroud)
错误消息是:unknown Something field 'a' in struct literal.
这对我来说似乎非常奇怪.这真的是预期的功能吗?
谢谢您的帮助!
Leo*_*rea 23
Golang没有提供典型的继承概念.你在这里完成的是酝酿.
它不给外部结构提供内部结构的字段,而是允许外部结构访问内部结构的字段.
为了创建外部结构,Something您需要提供包含内部结构的字段Base
在你的情况下:
Something{Base: Base{a: "letter a"}, c: "letter c"}
Run Code Online (Sandbox Code Playgroud)
您需要显式创建这样的Base字段
f(Something{
Base: Base{a: "letter a"},
c: "letter c",
})
Run Code Online (Sandbox Code Playgroud)
Go没有继承,只是组合.
您还必须实际实例化嵌入结构。你知道这在技术上不是继承,Go 中不存在这样的功能。这就是所谓的嵌入。它只是将字段和方法从嵌入类型提升到嵌入器范围。所以无论如何,您尝试执行的复合文字实例化将如下所示;
f(Something{
Base: Base{a: "a", b: "b"},
c: "c",
})
Run Code Online (Sandbox Code Playgroud)