我Go对 的概念很陌生,也很陌生reflection,但是应该并且可以在中避免使用反射包Go吗?有没有reflect不可避免的场景?
2 回答
弑天下
TA贡献1818条经验 获得超8个赞
有几个问题域可以通过反射使编写可重用库变得更容易:
编组/解组,标准库中有大量示例,例如
encoding/json
,encoding/xml
格式化,例如
text/template
,html/template
,fmt.Printf
.
但是,使用反射需要付出代价:
编译时错误变成运行时错误(例如
fmt.Printf("%d", stringVariable)
)性能变差
通常存在不需要反射(例如代码生成)的替代解决方案,它由 protobuf 或 thrift 等编组库使用。
我同意@volker 的观点,即只有在您知道反射会简化现有代码并了解所有缺点时才应该使用反射。
慕勒3428872
TA贡献1848条经验 获得超6个赞
你应该避免反射。
某些包(例如 fmt)无法在没有反射的情况下实现,因为您无法在所有现有和即将出现的类型上进行类型切换。
如果您是 Go 新手:远离反射。
- 2 回答
- 0 关注
- 258 浏览
添加回答
举报
0/150
提交
取消