结构体允许其成员字段在声明时没有字段名而只有类型,这种没有名字的字段就称为匿名字段。

    1. package main
    2. import "fmt"
    3. type Person struct {
    4. Name string
    5. Age int
    6. int // 匿名字段,等同于 int int
    7. }
    8. func main() {
    9. p := Person{Name: "sgg", Age: 22}
    10. fmt.Println(p.int) // 调用匿名变量,调用类型
    11. }

    结构体也可以作为匿名字段使用

    1. package main
    2. import "fmt"
    3. type Addr struct {
    4. country string
    5. province string
    6. city string
    7. }
    8. type Person struct {
    9. Name string
    10. Age int
    11. Addr // 匿名变量
    12. }
    13. func main() {
    14. p1 := Person{
    15. Name: "sgg",
    16. Age: 22,
    17. Addr: Addr{"China", "shanghai", "yangpu"},
    18. }
    19. fmt.Println(p1.Addr.province) // shanghai
    20. // 如果 Person 里面有province属性则取 Person中的,没有则取Addr中的
    21. fmt.Println(p1.province) // shanghai,所以 等同于 p1.Addr.province
    22. }

    当结构体中有和匿名字段相同的字段时,采用外层优先访问原则