# reflect 基本使用

URL: https://caijiao.org/go/05-utils/09-reflect
Source: docs/go/05-utils/09-reflect.md
Description: 本节介绍 Go 语言 reflect 包的基本用法，实现动态类型检查和操作。

## 1. reflect 简介

reflect 包允许程序在运行时检查类型和值，实现动态操作。

## 2. 获取类型和值

```go
var x float64 = 3.14
v := reflect.ValueOf(x)
t := reflect.TypeOf(x)
fmt.Println("Type:", t)
fmt.Println("Value:", v)
````

## 3. 修改值

必须使用可设置的值：

```go
var y int = 10
p := reflect.ValueOf(&y)
v := p.Elem()
v.SetInt(20)
fmt.Println(y)  // 输出 20
```

## 4. 结构体字段和方法

获取字段和方法：

```go
type Person struct {
    Name string
    Age  int
}

p := Person{"Alice", 30}
v := reflect.ValueOf(p)
fmt.Println("Name:", v.FieldByName("Name"))
```

## 5. 注意事项

* 反射性能较低，谨慎使用
* 只能修改可设置的值（Addressable）

---

reflect 是实现高级功能如序列化、ORM 的基础。
