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

我们如何将另一个结构内部的结构称为嵌入式结构?

我们如何将另一个结构内部的结构称为嵌入式结构?

Go
翻阅古今 2023-01-03 17:12:43
为什么我们不称 person 字段为embedded?“type user struct { name  string email string} type admin struct { person user  // NOT Embedding level  string}”但在像下面这样的其他情况下,我们称之为嵌入式:“type user struct { name  string email string} type admin struct { user  // Value Semantic Embedding level  string}”我认为这person也像值/指针语义嵌入一样被嵌入。我在这里缺少什么?
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

因为Go 语言规范就是这样定义它的:

使用类型声明但没有显式字段名称的字段称为嵌入字段

我可以看到术语“嵌入式”会如何令人困惑。毕竟,命名和未命名字段最终具有相同的内存布局,“嵌入”到父结构中。“匿名字段”可能是一个更好的名字,但这不是 Go 语言设计者选择的名字。


查看完整回答
反对 回复 2023-01-03
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

使用第一段代码,您不能将admin对象视为user对象,例如使用成员访问或类型断言。这也会影响嵌入结构如何满足interfaces。


例如,以下代码适用于适当的嵌入,但不适用于简单的成员结构:


var a admin


a.name = "asdfg"


u := a.(user)


查看完整回答
反对 回复 2023-01-03
  • 2 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

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