兄弟连go教程(19)数据 - 匿名字段


匿名字段不过是⼀一种语法糖,从根本上说,就是⼀一个与成员类型同名 (不含包名) 的字段。
被匿名嵌⼊入的可以是任何类型,当然也包括指针。
type User struct {
name string
}
type Manager struct {
User
title string
}

m := Manager{
User: User{"Tom"}, // 匿名字段的显式字段名,和类型名相同。
title: "Administrator",
}


可以像普通字段那样访问匿名字段成员,编译器从外向内逐级查找所有层次的匿名字段,
直到发现⺫⽬目标或出错。
type Resource struct {
id int
}
type User struct {
Resource
name string
}
type Manager struct {
User
title string
}
var m Manager
m.id = 1
m.name = "Jack"
m.title = "Administrator"


外层同名字段会遮蔽嵌⼊入字段成员,相同层次的同名字段也会让编译器⽆无所适从。解决⽅方
法是使⽤用显式字段名。
type Resource struct {
id int
name string
}
type Classify struct {
id int
}
type User struct {
Resource // Resource.id 与 Classify.id 处于同⼀一层次。
Classify
name string // 遮蔽 Resource.name。
}
u := User{

Resource{1, "people"},
Classify{100},
"Jack",
}
println(u.name) // User.name: Jack
println(u.Resource.name) // people
// println(u.id) // Error: ambiguous selector u.id
println(u.Classify.id) // 100


不能同时嵌⼊入某⼀一类型和其指针类型,因为它们名字相同。
type Resource struct {
id int
}
type User struct {
*Resource
// Resource // Error: duplicate field Resource
name string
}
u := User{
&Resource{1},
"Administrator",
}
println(u.id)
println(u.Resource.id)

尹成老师

QQ77025077 

微信18510341407

所有视频在尹成学院

www.yinchengxueyuan.com

尹成百度云请联系QQ475318423


猜你喜欢

转载自blog.csdn.net/yincheng01/article/details/80911206