零值 sync.Mutex 和 sync.RWMutex 是有效的。所以指向 mutex 的指针基本是不必要的。
var mu sync.Mutexmu.Lock()
Channel 的 size 要么是 1,要么是无缓冲的
枚举从 1 开始
type Operation intconst (Add Operation = iota + 1SubtractMultiply)
使用 time.Time 表达瞬时时间
在处理时间的瞬间时使用 [time.Time](https://golang.org/pkg/time/#Time),在比较、添加或减去时间时使用 time.Time 中的方法。
func isActive(now, start, stop time.Time) bool {return (start.Before(now) || start.Equal(now)) && now.Before(stop)}
在尽可能的情况下,在初始化要追加的切片时为make()提供一个容量值。
优先使用 strconv 而不是 fmt
包命名
- 全部小写。没有大写或下划线。
- 大多数使用命名导入的情况下,不需要重命名。
- 简短而简洁。请记住,在每个使用的地方都完整标识了该名称。
- 不用复数。例如
net/url,而不是net/urls。 - 不要用“common”,“util”,“shared”或“lib”。这些是不好的,信息量不足的名称。
嵌入式类型(例如 mutex)应位于结构体内的字段列表的顶部,并且必须有一个空行将嵌入式字段与常规字段分隔开。
不应明确返回长度为零的切片。应该返回nil 来代替。
要检查切片是否为空,请始终使用len(s) == 0。而非 nil。
