项目:Uber Go Style Guide [1]
简述
Uber Go Style Guide 项目是 Uber 的 Go 的代码规范。上述的项目指向的地址是其的英文地址。而它的中文版本的地址是 github.com/xxjwxc/uber… 。
通过参考这个 Guide 可以让我们形成的自己的代码编写规范。
笔记
Uber Go Style Guide 这一规范在其的介绍中,不仅是 Uber 自己的实践,同时也参考了以下的资料:
- Effective Go [2]
- Go Common Mistakes [3]
- Go Code Review Comments [4]
那么我们在撰写自己的规范的是也可以进行对应的参考。下述是我认为值得关注的一些规范点,笔记的内容是在中文版翻译上进行的:
-
这一规范点需要我们注意引入 struct 中禁止下面的书写方式:
type SMap struct { sync.Mutex data map[string]string }这样的声明方式导致 Lock / Unlock 这些并不是使者关注到的方法被暴露出,导致使用者在使用过程中的困惑
-
枚举类型在 Go 中并不支持。而 Uber 的推荐是从 1 开始是一个好的建议。但比起让枚举以 1 这样的数字形式。我更希望枚举类型也是 String 类型,那么它将可以方便代码和数据存储时,一一对应。那么建议的代码形式如下:
ype Operation String const ( Add Operation = "add" Subtract Operation = "subtract" Multiply Operation = "multiply" )在接口的对外枚举上也可以更好的实现 type 这样的定义
-
错误命名是一个值得学习的点,可以通过 errors.Is 和 errors.New 实现的枚举配合完成对错误的统一管理
-
init(),我个人认为可以用于模块的一些 cache 或者单例的初始化,但不建议用于加载配置数据。
-
建议使用 log.Fatal 来完成,从 log.Fatal 的定义中
Fatal is equivalent to Print() followed by a call to os.Exit(1).最终还是调用 os.Exit(1) 来实现的,但是 Print 有助于退出原因的输出
到此,笔记结束!
References
[1]: Uber Go Style Guide: golang.org/doc/effecti…
[2]: Effective Go: github.com/golang/go/w…
[3]: Go Common Mistakes: github.com/golang/go/w…
[4]: Go Code Review Comments: github.com/uber-go/gui…