# 匿名字段与嵌套结构体

URL: https://caijiao.org/go/03-structured/03-anonymous-nested
Source: docs/go/03-structured/03-anonymous-nested.md
Description: 本节介绍 Go 语言中结构体的匿名字段与嵌套结构体用法，实现结构体的组合与继承效果。

结构体支持匿名字段和嵌套，便于组合复用。

## 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"
```

---

匿名字段和嵌套结构体增强结构体的表达力，实现简单的继承与组合。
