Go 语言之父 Rob Pike 总结的几条 Go 谚语。
来源: Go Proverbs - Rob Pike - Gopherfest - November 18, 2015
- Don’t communicate by sharing memory, share memory by communicating.
- Concurrency is not parallism.
- Channels orchestrate; mutexes serialize.
- The bigger the interface, the weaker the abstraction.
- Make the zero value useful. (e.g. bytes.Buffer or sync.Mutex)
- interface{} says nothing.
- Gofmt’s style is no one’s favorite, yet gofmt is everyone’s favorite.
- A little copying is better than a little dependency.
- Syscall must always be guarded with build tags.
- Cgo must always be guarded with build tags.
- Cgo is not Go.
- With the unsafe package, there are no guarantees.
- Clear is better than clever.
- Reflection is never clear.
- Errors are values.
- Don’t just check errors, handle them gracefully.
- Design the architecture, name the components, document the details.
- Documentation is for users.
- Don’t panic.
解读
- 不要通过共享内存来通信,而应该通过通信的方式共享内存。
Go 官方博客的解读
- 并发不是并行。
- Channels 编排;互斥量的串行化。
使用 chan 串行处理互斥量。
- 接口越大,抽象能力越弱。
好的接口定义一般不超过两种方法.
- 让零值有用(比如 bytes.Buffer 或 sync.Mutex)。
- interface{} 没有信息。
因为接口类型无法做到静态检查。
- Gofmt 的风格没有人喜欢,但 Gofmt 却是每个人的最爱。
- 做一点复制比一点依赖更好。
- 系统调用必须由构建标签保证。
- Cgo 必须由构建标签保证。
- Cgo 不是 Go 。
他说自己几乎不使用 cgo 。 Dave 博客的解读。
- unsafe 包中的内容,没有保证。
- 清晰比聪明更重要。
书写逻辑清晰的代码,不要耍小聪明。
- 反射永远是不清晰的。
- 错误也是值。
Go 官方博客的解读。
- 不要仅仅检查报错,要优雅的处理它们。
Dave 博客的解读。
- 设计架构,命名组件,记录细节。
取一个好名字解释起来也省事。
- 文档是给用户看的。
文档应该记录用户需要知道的内容。
- 不要恐慌。
程序 panic 不是正常的错误,要找到问题并解决。正常错误用 error 处理。