Uber Go Style Guide 的笔记

536 阅读2分钟

项目: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]

那么我们在撰写自己的规范的是也可以进行对应的参考。下述是我认为值得关注的一些规范点,笔记的内容是在中文版翻译上进行的:

  • 零值 Mutex 是有效的

    这一规范点需要我们注意引入 struct 中禁止下面的书写方式:

    type SMap struct {
    sync.Mutex
    
    data map[string]string
    }
    

    这样的声明方式导致 Lock / Unlock 这些并不是使者关注到的方法被暴露出,导致使用者在使用过程中的困惑

  • 枚举从 1 开始

    枚举类型在 Go 中并不支持。而 Uber 的推荐是从 1 开始是一个好的建议。但比起让枚举以 1 这样的数字形式。我更希望枚举类型也是 String 类型,那么它将可以方便代码和数据存储时,一一对应。那么建议的代码形式如下:

    ype Operation String
    
    const (
        Add Operation = "add"
        Subtract Operation = "subtract"
        Multiply Operation = "multiply"
    )
    

    在接口的对外枚举上也可以更好的实现 type 这样的定义

  • 错误命名

    错误命名是一个值得学习的点,可以通过 errors.Is 和 errors.New 实现的枚举配合完成对错误的统一管理

  • 避免使用 init()

    init(),我个人认为可以用于模块的一些 cache 或者单例的初始化,但不建议用于加载配置数据。

  • 主函数退出方式 (Exit)

    建议使用 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…