登录
首页 >  Golang >  Go问答

嵌入结构的定义与内部结构相关的是什么?

来源:stackoverflow

时间:2024-02-09 08:12:22 366浏览 收藏

你在学习Golang相关的知识吗?本文《嵌入结构的定义与内部结构相关的是什么?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

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


正确答案


因为 Go language specification 就是这么定义的:

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

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

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

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

var a admin

a.name = "asdfg"

u := a.(user)

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《嵌入结构的定义与内部结构相关的是什么?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>