为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中应该避免使用反射吗?

在 Go 中应该避免使用反射吗?

Go
德玛西亚99 2021-11-29 16:50:07
我Go对 的概念很陌生,也很陌生reflection,但是应该并且可以在中避免使用反射包Go吗?有没有reflect不可避免的场景?
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

有几个问题域可以通过反射使编写可重用库变得更容易:

  • 编组/解组,标准库中有大量示例,例如encoding/jsonencoding/xml

  • 格式化,例如text/templatehtml/templatefmt.Printf.

但是,使用反射需要付出代价:

  • 编译时错误变成运行时错误(例如fmt.Printf("%d", stringVariable)

  • 性能变差

通常存在不需要反射(例如代码生成)的替代解决方案,它由 protobuf 或 thrift 等编组库使用。

我同意@volker 的观点,即只有在您知道反射会简化现有代码并了解所有缺点时才应该使用反射。


查看完整回答
反对 回复 2021-11-29
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

你应该避免反射。

某些包(例如 fmt)无法在没有反射的情况下实现,因为您无法在所有现有和即将出现的类型上进行类型切换。

如果您是 Go 新手:远离反射。


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信