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

为什么我们不称 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也像值/指针语义嵌入一样被嵌入。我在这里缺少什么?


翻阅古今
浏览 117回答 2
2回答

蝴蝶刀刀

因为Go 语言规范就是这样定义它的:使用类型声明但没有显式字段名称的字段称为嵌入字段。我可以看到术语“嵌入式”会如何令人困惑。毕竟,命名和未命名字段最终具有相同的内存布局,“嵌入”到父结构中。“匿名字段”可能是一个更好的名字,但这不是 Go 语言设计者选择的名字。

扬帆大鱼

使用第一段代码,您不能将admin对象视为user对象,例如使用成员访问或类型断言。这也会影响嵌入结构如何满足interfaces。例如,以下代码适用于适当的嵌入,但不适用于简单的成员结构:var a admina.name = "asdfg"u := a.(user)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go