> For the complete documentation index, see [llms.txt](https://wskdsgcf.gitbook.io/mastering-go-zh-cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wskdsgcf.gitbook.io/mastering-go-zh-cn/7-fan-she-he-jie-kou/07.5/07.5.3.md).

# 07.5.3 反射的三个缺点

毫无疑问，反射是Go语言一个强大的功能。然而，由于所有工具都使用反射，因此应谨慎使用，主要有三个原因。

第一个原因是反射的广泛使用会使程序难以阅读和维护。这个问题的一个潜在解决方案是编写好的文档；但众所周知的是开发人员并不愿意花时间来编写维护文档。

第二个原因是使用反射的Go代码会使程序运行变慢。一般来说，用于特定数据类型的Go代码总是比使用反射动态处理Go数据类型的代码运行速度快。此外，这样的动态代码将使工具很难重构或分析代码。

最后一个原因是反射错误在编译时无法捕获，并且运行时会造成`panic`异常。这意味着反射的错误可能会使程序崩溃！这可能发生在Go程序开发完成后的数月甚至数年后！这个问题的一个解决办法是在危险函数调用之前进行全面的测试。然而，这将为Go程序增加更多的代码，使程序运行的更慢。
