Go 谚语

2020/01/10

Go 语言之父 Rob Pike 总结的几条 Go 谚语。

来源: Go Proverbs - Rob Pike - Gopherfest - November 18, 2015

  1. Don’t communicate by sharing memory, share memory by communicating.
  2. Concurrency is not parallism.
  3. Channels orchestrate; mutexes serialize.
  4. The bigger the interface, the weaker the abstraction.
  5. Make the zero value useful. (e.g. bytes.Buffer or sync.Mutex)
  6. interface{} says nothing.
  7. Gofmt’s style is no one’s favorite, yet gofmt is everyone’s favorite.
  8. A little copying is better than a little dependency.
  9. Syscall must always be guarded with build tags.
  10. Cgo must always be guarded with build tags.
  11. Cgo is not Go.
  12. With the unsafe package, there are no guarantees.
  13. Clear is better than clever.
  14. Reflection is never clear.
  15. Errors are values.
  16. Don’t just check errors, handle them gracefully.
  17. Design the architecture, name the components, document the details.
  18. Documentation is for users.
  19. Don’t panic.

解读

  1. 不要通过共享内存来通信,而应该通过通信的方式共享内存。

    Go 官方博客的解读

  2. 并发不是并行。
  3. Channels 编排;互斥量的串行化。

    使用 chan 串行处理互斥量。

  4. 接口越大,抽象能力越弱。

    好的接口定义一般不超过两种方法.

  5. 让零值有用(比如 bytes.Buffer 或 sync.Mutex)。
  6. interface{} 没有信息。

    因为接口类型无法做到静态检查。

  7. Gofmt 的风格没有人喜欢,但 Gofmt 却是每个人的最爱。
  8. 做一点复制比一点依赖更好。
  9. 系统调用必须由构建标签保证。
  10. Cgo 必须由构建标签保证。
  11. Cgo 不是 Go 。

    他说自己几乎不使用 cgo 。 Dave 博客的解读

  12. unsafe 包中的内容,没有保证。
  13. 清晰比聪明更重要。

    书写逻辑清晰的代码,不要耍小聪明。

  14. 反射永远是不清晰的。
  15. 错误也是值。

    Go 官方博客的解读

  16. 不要仅仅检查报错,要优雅的处理它们。

    Dave 博客的解读

  17. 设计架构,命名组件,记录细节。

    取一个好名字解释起来也省事。

  18. 文档是给用户看的。

    文档应该记录用户需要知道的内容。

  19. 不要恐慌。

    程序 panic 不是正常的错误,要找到问题并解决。正常错误用 error 处理。

参考