主题
匿名字段与嵌套结构体
结构体支持匿名字段和嵌套,便于组合复用。
1. 嵌套结构体
定义结构体作为字段嵌入另一个结构体:
go
type Address struct {
City string
State string
}
type Person struct {
Name string
Address Address
}
p := Person{
Name: "Alice",
Address: Address{
City: "Beijing",
State: "BJ",
},
}
fmt.Println(p.Address.City) // 输出:Beijing
2. 匿名字段
匿名字段是只写类型名的字段,字段名隐式为类型名:
go
type Person struct {
Name string
Address // 匿名字段
}
p := Person{
Name: "Bob",
Address: Address{
City: "Shanghai",
State: "SH",
},
}
fmt.Println(p.City) // 直接访问匿名字段内的 City,输出:Shanghai
3. 字段冲突
当多个匿名字段含相同字段名,访问时需指定具体字段:
go
type A struct {
Name string
}
type B struct {
Name string
}
type C struct {
A
B
}
c := C{}
c.A.Name = "Alice"
c.B.Name = "Bob"
匿名字段和嵌套结构体增强结构体的表达力,实现简单的继承与组合。