嵌套结构体 嵌套匿名结构体
//address 地址结构体
type address struct {
province string
city string
}//user 用户结构体
type user struct {
name string
gender string
//addr address //结构体嵌套,访问 user1.addr.city
address //可以用匿名嵌套结构体(推荐), 访问user1.city或user1.address.city(名称冲突时用) 写成" *address " 表示指针
}
func main() {
user1 := user{
name: "小王子",
gender: "男",
address: address{ // 写"&address" 返回地址,上面定义时要用指针接收
Province: "山东",
City: "威海",
},
}
}
模拟“继承”,
把公共的属性定义在父匿名结构体中,这样在子结构体方法和父结构体方法中都能访问该属性
//animal 动物
type animal struct {
name string
}//dog 狗
type dog struct {
feet int8
*animal //通过嵌套匿名结构体实现继承,原理是animal中的字段可以通过dog对象直接访问
}func (a *animal) move() {
fmt.Printf("%s会动", a.name)
}func (d *dog) wang() {
fmt.Printf("%s会汪汪汪...", d.name)
}func main() {
d1 := &dog{
feet: 4,
animal: &animal{ //注意嵌套的是结构体指针
name: "乐乐",
},
}
d1.wang() //乐乐会汪汪汪~
d1.move() //乐乐会动!
}
结构体匿名字段(知道就行,很少用)
type Person struct {
string //结构体匿名字段,相同类型只能有一个,默认把类型当名字 p.string
int
}
11