13.5. 几点忠告

我们在前一章结尾的时候, 我们警告要谨慎使用反射. 那些警告同样适用于本章的 unsafe 包.

高级语言使得程序员不用在关系真正运行程序的指令细节, 同时也不再需要关注许多如内部布局之类的无关实现细节. 因为这个绝缘的抽象层, 我们可以编写安全健壮的, 并且可以运行在不同操作系统上的具有高度可移植性的程序.

但是 unsafe 包, 让程序员可以透过这个绝缘的抽象层使用使用一些必要的功能, 或者是为了更高的性能. 代价就是牺牲了可移植性和程序安全, 因此使用 unsafe 是一个危险的行为. 我们对何时以及如何使用unsafe包的建议和我们在11.5节提到的Knuth对过早优化的建议类似. 大多数Go程序员可能永远不会需要直接使用unsafe包. 当然, 永远都会有一些用 unsafe 包实现会更简单的场景. 如果确实认为使用 unsafe 包是最理想的方式, 那么应该尽可能将它限制较小的范围, 那样其他代码忽略unsafe的影响.

现在, 把最后两章抛入脑后吧. 编写一些实在的应用. 远离reflect的unsafe包, 除非你确实需要它们.

用Go快乐地编程. 我们希望你能像我们一样喜欢Go语言.