当声明一个继承自不同结构的结构时: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。这对我来说似乎很奇怪。这真的是预期的功能吗?谢谢您的帮助!
3 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
Golang 没有提供典型的继承概念。你在这里完成的是嵌入。
它不给外部结构内部结构的字段,而是允许外部结构访问内部结构的字段。
为了创建外部结构,Something
您需要提供包含内部结构的字段Base
在你的情况下:
Something{Base: Base{a: "letter a"}, c: "letter c"}
智慧大石
TA贡献1946条经验 获得超3个赞
您需要像这样显式创建 Base 字段
f(Something{
Base: Base{a: "letter a"},
c: "letter c",
})
Go 没有继承,它只是组合。
喵喵时光机
TA贡献1846条经验 获得超7个赞
您还必须实际实例化嵌入的结构。只是为了让您知道这在技术上不是继承,Go 中不存在这样的功能。这叫做嵌入。它只是将字段和方法从嵌入类型提升到嵌入范围。所以无论如何,您尝试执行的复合文字实例化看起来像这样;
f(Something{
Base: Base{a: "a", b: "b"},
c: "c",
})
- 3 回答
- 0 关注
- 189 浏览
添加回答
举报
0/150
提交
取消