知识卡片
反射换取动态性
内容
反射把类型和值带到运行时处理,适合序列化、ORM、依赖注入等通用框架。代价是可读性、编译期检查和性能下降;它应服务边界层,而不是侵入核心业务。
参考来源
- 位置:《Go语言底层原理剖析》第13章《反射高级编程》13.1节《为什么需要反射》与总结部分
- 结论依据:原文以生成 SQL 语句为例说明——不用反射就需要为每个结构体单独写生成方法,而"如果有办法在运行时探测到结构体变量中的方法名就好了,这恰恰就是反射为我们提供的功能";总结部分进一步指出反射"在实践中很少会涉及编写反射代码,但是反射确实在一些底层工具类代码和RPC远程过程调用中应用广泛(例如json、xml、grpc、protobuf)",因此可以推出"反射把类型值带到运行时处理,服务通用框架"的结论。
- 原始内容:但是,假如我们有其他结构体也有相同的需求呢?……如果有办法在运行时探测到结构体变量中的方法名就好了,这恰恰就是反射为我们提供的功能……虽然在实践中很少会涉及编写反射代码,但是反射确实在一些底层工具类代码和RPC远程过程调用中应用广泛(例如json、xml、grpc、protobuf)。