Uber Go 语言编码规范
Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter。其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap、jaeger 等。
2018 年年末 Uber 将内部的 Go 风格规范 开源到 GitHub,经过一年的积累和更新,该规范已经初具规模,并受到广大 Gopher 的关注。本
文是该规范的中文版本。本版本会根据原版实时更新。
目录
Uber Go 语言编码规范 ................................................................................................................................................................................................... 1
目录 ................................................................................................................................................................................................................................. 1
版本 ................................................................................................................................................................................................................................. 2
介绍 ................................................................................................................................................................................................................................. 2
指导原则 ......................................................................................................................................................................................................................... 2
指向 interface 的指针 ............................................................................................................................................................................................ 2
接收器 (receiver) 与接口 ....................................................................................................................................................................................... 2
零值 Mutex 是有效的 ............................................................................................................................................................................................. 3
在边界处拷贝 Slices 和 Maps .............................................................................................................................................................................. 4
使用 defer 释放资源 ............................................................................................................................................................................................... 5
Channel 的 size 要么是 1,要么是无缓冲的 ..................................................................................................................................................... 5
枚举从 1 开始 ........................................................................................................................................................................................................... 5
错误类型 ..................................................................................................................................................................................................................... 6
错误包装 (Error Wrapping) ................................................................................................................................................................................... 7
处理类型断言失败 ..................................................................................................................................................................................................... 7
不要 panic ................................................................................................................................................................................................................. 8
使用 go.uber.org/atomic ...................................................................................................................................................................................... 8
性能 ................................................................................................................................................................................................................................. 9
优先使用 strconv 而不是 fmt .............................................................................................................................................................................. 9
避免字符串到字节的转换 ......................................................................................................................................................................................... 9
尽量初始化时指定 Map 容量................................................................................................................................................................................. 9
规范 ................................................................................................................................................................................................................................. 9
一致性 ......................................................................................................................................................................................................................... 9
相似的声明放在一组 ............................................................................................................................................................................................... 10
import 分组 ............................................................................................................................................................................................................ 11
包名 ........................................................................................................................................................................................................................... 11
函数名 ....................................................................................................................................................................................................................... 11
导入别名 ................................................................................................................................................................................................................... 11
函数分组与顺序 ....................................................................................................................................................................................................... 12
减少嵌套 ................................................................................................................................................................................................................... 12
不必要的 else .......................................................................................................................................................................................................... 12
顶层变量声明 ........................................................................................................................................................................................................... 13
对于未导出的顶层常量和变量,使用_作为前缀 ................................................................................................................................................. 13
结构体中的嵌入 ....................................................................................................................................................................................................... 13
使用字段名初始化结构体 ....................................................................................................................................................................................... 14
本地变量声明 ........................................................................................................................................................................................................... 14
nil 是一个有效的 slice .......................................................................................................................................................................................... 14
小变量作用域 ........................................................................................................................................................................................................... 15
避免参数语义不明确(Avoid Naked Parameters) ............................................................................................................................................. 15
使用原始字符串字面值,避免转义 ....................................................................................................................................................................... 16
评论0
最新资源