# 结构体比较与复制

URL: https://caijiao.org/go/03-structured/04-compare-copy
Source: docs/go/03-structured/04-compare-copy.md
Description: 本节介绍 Go 语言中结构体的比较与复制规则，帮助理解结构体值的传递和比较方法。

结构体是值类型，支持直接比较和复制操作。

## 1. 结构体比较

两个结构体变量可以使用 `==` 和 `!=` 比较，比较所有字段值是否相等。

```go
type Person struct {
    Name string
    Age  int
}

p1 := Person{Name: "Alice", Age: 30}
p2 := Person{Name: "Alice", Age: 30}
p3 := Person{Name: "Bob", Age: 25}

fmt.Println(p1 == p2) // true
fmt.Println(p1 == p3) // false
````

注意：结构体中所有字段都必须是可比较类型，才支持比较。

## 2. 结构体复制

赋值操作会复制结构体所有字段，互不影响。

```go
p1 := Person{Name: "Alice", Age: 30}
p2 := p1

p2.Age = 35
fmt.Println(p1.Age) // 30
fmt.Println(p2.Age) // 35
```

## 3. 指针复制

使用结构体指针时，复制的是指针地址，指向同一数据。

```go
p1 := &Person{Name: "Alice", Age: 30}
p2 := p1
p2.Age = 40
fmt.Println(p1.Age) // 40
```

---

理解结构体比较与复制有助于避免意外的值修改和提高代码安全性。
