Go 反射
Go 反射允许程序在运行时检查和操作类型与值信息,常用于框架、编解码和通用工具,但会带来更高复杂度和更弱可读性。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 高级运行时与抽象 MOC
- 前置概念: Go 接口, Go 的 struct 与方法
- 易混淆概念: Go 泛型
Go 反射
一句话定义
Go 反射让程序在运行时检查类型和值的结构信息,并在一定范围内做动态访问和操作。
核心机制 / 工作原理
反射出现的典型原因是:
- 编写框架或通用库
- 根据类型元信息做自动映射
- 编解码或标签驱动处理
它的价值在于灵活,但代价也很明显:
- 代码更难读
- 调试成本更高
- 编译期类型保障会削弱
最小例子 / 最小场景
序列化库、ORM、配置映射工具,经常会根据结构体字段和 tag 在运行时决定如何处理数据,这就是反射的典型应用语境。
为什么这部分重要
很多 Go 初学者一接触框架就会碰到反射,但如果没有先建立 struct、接口、导出规则这些基础,会很难理解框架到底在做什么。
边界与易混淆点
- 反射不是“高级所以默认更好”
- 泛型和反射都能减少重复,但一个偏编译期抽象,一个偏运行期动态处理
- 日常业务代码通常应尽量少依赖反射