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

Go对 的概念很陌生,也很陌生reflection,但是应该并且可以在中避免使用反射Go吗?有没有reflect不可避免的场景?


德玛西亚99
浏览 259回答 2
2回答

弑天下

有几个问题域可以通过反射使编写可重用库变得更容易:编组/解组,标准库中有大量示例,例如encoding/json,encoding/xml格式化,例如text/template, html/template, fmt.Printf.但是,使用反射需要付出代价:编译时错误变成运行时错误(例如fmt.Printf("%d", stringVariable))性能变差通常存在不需要反射(例如代码生成)的替代解决方案,它由 protobuf 或 thrift 等编组库使用。我同意@volker 的观点,即只有在您知道反射会简化现有代码并了解所有缺点时才应该使用反射。

慕勒3428872

你应该避免反射。某些包(例如 fmt)无法在没有反射的情况下实现,因为您无法在所有现有和即将出现的类型上进行类型切换。如果您是 Go 新手:远离反射。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go