Go语言反射

什么是反射

在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述和监测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang 语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的 reflect 就是反射相关的,只要包含这个包就可以使用。

支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体 信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。

Golang反射

反射,就是建立在 类型 之上的,Golang 的指定类型的 变量 的类型是静态的(也就是指定 intstring 这些的变量,它的 type 是 static type),在创建变量的时候就已经确定。

反射主要与 Golang 的 interface 类型相关(它的 type 是 concrete type),只有 interface 类型才有反射一说。

Go 程序的反射系统无法获取到一个可执行文件空间中或者是一个包中的所有类型信息,需要配合使用标准库中对应的词法、语法解析器和抽象语法树(AST)对源码进行扫描后获得这些信息。