在计算机科学中, 反射是指计算机程序在运行时可以访问, 检测和修改本身状态或行为的一种能力. 通俗地说, 反射就是程序能够在运行时动态地查看自己的状态, 并且允许修改自身的行为.
golang 的反射基础是编译器和运行时把类型信息以合适的数据结构保存在可执行程序中. golang 提供的 reflect 标准库知识为语言使用者提供一套访问接口, 反射实现是语言设计者在设计语言时考虑的. 本文主要讲解 reflect 标准库的用法. golang 的反射建立在 go 类型系统的基础之上, 和接口有紧密的关系.
go 的反射巧妙地借助了实例到接口的转换所需要的数据结构, 首先将实例传递给内部的空接口, 实际上是将一个实例类型转换为接口可以表述的数据结构 eface, 反射基于这个转换后的数据结构来访问和操作实例的值和类型. 在学习 interface 的过程中我们知道实例传递给 interface{} 类型时, 编译器会进行一个内部的转换, 自动创建相关类型数据结构. 如果不做这个设计, 则可能语言实现者还要再设计一套类型数据结构来支持反射.
- // to be continued
- [Journey with golang] 6. Reflection
来源: http://www.bubuko.com/infodetail-3394608.html