反射-2-应用
一 反射的使用
1.1 反射操作简单数据类型
var num int64 = 100
// 设置值:指针传递
ptrValue := reflect.ValueOf(&num)
newValue := ptrValue.Elem() // Elem()用于获取原始值的反射对象
fmt.Println("type:", newValue.Type()) // int64
fmt.Println(" can set:", newValue.CanSet()) // true
newValue.SetInt(200)
// 获取值:值传递
rValue := reflect.ValueOf(num)
fmt.Println(rValue.Int()) // 方式一:200
fmt.Println(rValue.Interface().(int64)) // 方式二:200
1.2 反射进行类型推断
type user struct {
Name string
Age int
}
u := &user{
Name: "Ruyue",
Age: 100,
}
fmt.Println(reflect.TypeOf(u)) // *main.user
fmt.Println(reflect.TypeOf(*u)) // main.user
fmt.Println(reflect.TypeOf(*u).Name()) // user
fmt.Println(reflect.TypeOf(*u).Kind()) // struct