主题
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 的基础。