猿问

Golang 结构继承没有按预期工作?

当声明一个继承自不同结构的结构时:


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。


这对我来说似乎很奇怪。这真的是预期的功能吗?


谢谢您的帮助!


繁星点点滴滴
浏览 190回答 3
3回答

慕田峪4524236

Golang 没有提供典型的继承概念。你在这里完成的是嵌入。它不给外部结构内部结构的字段,而是允许外部结构访问内部结构的字段。为了创建外部结构,Something您需要提供包含内部结构的字段Base在你的情况下:Something{Base: Base{a: "letter a"}, c: "letter c"}

智慧大石

您需要像这样显式创建 Base 字段f(Something{    Base: Base{a: "letter a"},    c:    "letter c",})Go 没有继承,它只是组合。

喵喵时光机

您还必须实际实例化嵌入的结构。只是为了让您知道这在技术上不是继承,Go 中不存在这样的功能。这叫做嵌入。它只是将字段和方法从嵌入类型提升到嵌入范围。所以无论如何,您尝试执行的复合文字实例化看起来像这样;f(Something{    Base: Base{a: "a", b: "b"},    c:    "c",})
随时随地看视频慕课网APP

相关分类

Go
我要回答