为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁星点点滴滴 2021-12-06 19:39:33
当声明一个继承自不同结构的结构时: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"}


查看完整回答
反对 回复 2021-12-06
?
智慧大石

TA贡献1946条经验 获得超3个赞

您需要像这样显式创建 Base 字段


f(Something{

    Base: Base{a: "letter a"},

    c:    "letter c",

})

Go 没有继承,它只是组合。


查看完整回答
反对 回复 2021-12-06
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

您还必须实际实例化嵌入的结构。只是为了让您知道这在技术上不是继承,Go 中不存在这样的功能。这叫做嵌入。它只是将字段和方法从嵌入类型提升到嵌入范围。所以无论如何,您尝试执行的复合文字实例化看起来像这样;


f(Something{

    Base: Base{a: "a", b: "b"},

    c:    "c",

})


查看完整回答
反对 回复 2021-12-06
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信