结构体允许其成员字段在声明时没有字段名而只有类型,这种没有名字的字段就称为匿名字段。
package main
import "fmt"
type Person struct {
Name string
Age int
int // 匿名字段,等同于 int int
}
func main() {
p := Person{Name: "sgg", Age: 22}
fmt.Println(p.int) // 调用匿名变量,调用类型
}
结构体也可以作为匿名字段使用
package main
import "fmt"
type Addr struct {
country string
province string
city string
}
type Person struct {
Name string
Age int
Addr // 匿名变量
}
func main() {
p1 := Person{
Name: "sgg",
Age: 22,
Addr: Addr{"China", "shanghai", "yangpu"},
}
fmt.Println(p1.Addr.province) // shanghai
// 如果 Person 里面有province属性则取 Person中的,没有则取Addr中的
fmt.Println(p1.province) // shanghai,所以 等同于 p1.Addr.province
}
当结构体中有和匿名字段相同的字段时,采用外层优先访问原则