go反射

go反射

应用场景

  • 在运行时动态创建对象
  • 在运行时动态修改对象的属性
  • 在运行时动态调用对象的方法
  • 在运行时动态判断对象的类型
  • 在运行时动态序列化和反序列化对象

常用方法

  • reflect.TypeOf() :获取变量的类型。
  • reflect.ValueOf() :获取变量的值。
  • reflect.Value.Type():获取reflect.Value的类型
  • reflect.Value.Interface():将reflect.Value转换为接口类型
  • reflect.Value.Elem():获取指向变量的指针的reflect.Value
  • reflect.Value.SetInt()/setFlout()/setString():设置值
  • reflect.New():返回一个指向类型的新实例的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 示例
func TestReflect(a *testing.T) {
i := 10

t := reflect.TypeOf(i)
fmt.Println(t) // int

v := reflect.ValueOf(i)
fmt.Println(v) // 10

value := reflect.ValueOf(&i)
fmt.Println(value.Type()) // *int
fmt.Println(value.Interface().(*int)) // i的地址
fmt.Println(value.Elem()) // 10
value.Elem().SetInt(20)
fmt.Println(i) // 20
}

go反射
http://xwww12.github.io/2023/11/24/go/go反射/
作者
xw
发布于
2023年11月24日
许可协议