reflect 基本使用

1. reflect 简介

reflect 包允许程序在运行时检查类型和值,实现动态操作。

2. 获取类型和值

var x float64 = 3.14
v := reflect.ValueOf(x)
t := reflect.TypeOf(x)
fmt.Println("Type:", t)
fmt.Println("Value:", v)

`

3. 修改值

必须使用可设置的值:

var y int = 10
p := reflect.ValueOf(&y)
v := p.Elem()
v.SetInt(20)
fmt.Println(y)  // 输出 20

4. 结构体字段和方法

获取字段和方法:

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