反射
反射是指在程序运行期间对程序本身进行访问和修改的能力。正常情况程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息(如字段名称、类型信息、结构体信息等)整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。
golang中可以实现的功能:
1、反射可以在程序运行期间动态地获取变量的各种信息,如变量的类型、类别
2、若是结构体,通过反射可以获取结构体本身的信息,如结构体的字段、方法
3、通过反射,可以修改变量的值,可以调用关联的方法
golang中变量分为两部分:
·类型信息:预先定义好的元信息。
·值信息:程序运行过程中可动态变化的。
在golang的反射机制中,任何接口值都由一个具体类型和具体类型的值两部分组成。
golang中反射的相关功能由内置的reflect包提供,任意接口值在反射中都可以理解为由reflect.Type和reflect.Value两部分组成,并且提供了reflect.TypeOf和reflect.ValueOf两个重要函数来获取任意对象的Value和Type。
golang中关于类型划分为两个部分:类型(Type)和种类(Kind)
种类(Kind)就是指底层的类型,在反射中,当需要去区分指针、结构体等大品种的类型时,就会用到Kind。
reflect.TypeOf:获取任意值的类型对象
reflect.ValueOf:获取原始值方法

编辑 (opens new window)