1、reflect.Value.Kind,获取变量的类别,返回的是一个常量
2、Type是类型,Kind是类别,类比包含类型,在程序中,Type和 Kind有可能相同 也有可能不同。
var b int =10 //b的Type是int kind也是int
var s student //s的Type是student,kind是Struct
3、变量与反射之间 的转换,都要通过空接口来实现
变量<--------->interface{}<---------->reflect.Value
可以这么理解:reflect.Value{}这个函数的形参 是 空接口,因为空接口可以接受任意类型的变量。
当refelct.Value类型要转变到原本的类型的时候,需要通过.interface()函数转换到interface()类型,在通过类型断言的方式转换到原本的数据类型。
4、用反射来获取变量的值,必须保持类型一致。
b:=9 //b的类型是int
rb:=reflect.ValueOf(b) //将int类型变成了 反射值指针类型
//可以通过printf来查看rb的类型
fmt.Printf("rb的类型是:%T",rb)
//通过.Int()可以获取b的值 次数必须保持于原本的变量 类型一致
bv:=rb.Int()
5、如何传入到反射的是一个指针,需要修改原变量的值是需要用到Elem()
num:=90
rNum:=reflect.ValueOf(&num)
rNum.Elem().SetInt(80)
fmt.Println(num)
即通过反射修改变量的值,必须使用指针,然后调用Elem().Setxxx()这样