并发

  • 以线程安全的方式创建单例(只创建一次)的最好选择是 sync.Once
    • 不要用 flags, mutexes, channels or atomics
  • 永远不要使用 select{}, 省略通道, 等待信号
  • 不要关闭一个发送(写入)管道,应该由创建者关闭
    • 往一个关闭的 channel 写数据会引起 panic
  • math/rand 中的 func NewSource(seed int64) Source 不是并发安全的,默认的 lockedSource 是并发安全的, see issue: https://github.com/golang/go/issues/3611
  • 当你需要一个自定义类型的 atomic 值时,可以使用 atomic.Value