This commit is contained in:
Xargin
2016-10-10 14:53:50 +08:00
parent 7d40fb4d28
commit ef1d302ae6
6 changed files with 12 additions and 12 deletions

View File

@@ -2,9 +2,9 @@
我们在前一章结尾的时候我们警告要谨慎使用reflect包。那些警告同样适用于本章的unsafe包。
高级语言使得程序员不用关心真正运行程序的指令细节,同时也不再需要关注许多如内存布局之类的实现细节。因为高级语言这个绝缘的抽象层,我们可以编写安全健壮的,并且可以运行在不同操作系统上的具有高度可移植性的程序。
高级语言使得程序员不用关心真正运行程序的指令细节,同时也不再需要关注许多如内存布局之类的实现细节。因为高级语言这个绝缘的抽象层,我们可以编写安全健壮的,并且可以运行在不同操作系统上的具有高度可移植性的程序。
但是unsafe包它让程序员可以透过这个绝缘的抽象层直接使用一些必要的功能虽然可能是为了获得更好的性能。但是代价就是牺牲了可移植性和程序安全因此使用unsafe包是一个危险的行为。我们对何时以及如何使用unsafe包的建议和我们在11.5节提到的Knuth对过早优化的建议类似。大多数Go程序员可能永远不会需要直接使用unsafe包。当然也永远都会有一些需要使用unsafe包实现会更简单的场景。如果确实认为使用unsafe包是最理想的方式那么应该尽可能将它限制在较小的范围样其它代码就忽略unsafe的影响。
但是unsafe包它让程序员可以透过这个绝缘的抽象层直接使用一些必要的功能虽然可能是为了获得更好的性能。但是代价就是牺牲了可移植性和程序安全因此使用unsafe包是一个危险的行为。我们对何时以及如何使用unsafe包的建议和我们在11.5节提到的Knuth对过早优化的建议类似。大多数Go程序员可能永远不会需要直接使用unsafe包。当然也永远都会有一些需要使用unsafe包实现会更简单的场景。如果确实认为使用unsafe包是最理想的方式那么应该尽可能将它限制在较小的范围样其它代码就可以忽略unsafe的影响。
现在赶紧将最后两章抛入脑后吧。编写一些实实在在的应用是真理。请远离reflect的unsafe包除非你确实需要它们。