零值 sync.Mutex
和 sync.RWMutex
是有效的。所以指向 mutex 的指针基本是不必要的。
var mu sync.Mutex
mu.Lock()
Channel 的 size 要么是 1,要么是无缓冲的
枚举从 1 开始
type Operation int
const (
Add Operation = iota + 1
Subtract
Multiply
)
使用 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
。