教程 go tutorial

匿名字段与嵌套结构体

结构体支持匿名字段和嵌套,便于组合复用。

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"

匿名字段和嵌套结构体增强结构体的表达力,实现简单的继承与组合。