基本介绍
1.反射可以在运行时动态获取变量的各种信息,比如变量的类型(type),类别(kind)
2.如果是结构体变量还可以获取到结构本身的信息(包括字段和方法)
3.通过反射可以修改变量的值,可以调用关联的方法
4.使用反射需要引入reflect包
reflect包介绍
import "reflect"
reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,通过调用TypeOf获取其动态类型信息,该函数返回一个Type类型值。调用ValueOf函数返回一个Value类型值,该值代表运行时的数据。Zero接受一个Type类型参数并返回一个代表该类型零值的Value类型值。
反射的注意事项和细节说明
1.reflect.Value.Kind,获取变量的类别,返回的是一个常量
2.Type是类型,Kind是类别,Type和Kind可能是相同的,也可能是不相同的,
比如说自定义一个结构体Person,那么这个结构体的类别是struct,类型是Person,
自定义一个结构体Computer,那么这个结构体的类别是struct,类型是Computer,
但是如果是int的话,那么类型和类别都是int
3.通过反射可以让变量在interface{}和Reflect.Value之间相互转换,interface可以通过类型断言得到实际变量的类型