基本规则

Go约定使用MixedCaps或者mixedCaps的形式,而不是下划线来书写多个单词的名字。

工程名称

  1. 项目名(仓库名)的命名可以使用字母、数字。
  2. 多个单词建议采用中划线分隔,目前github中大多数项目都是使用用中划线,不建议采用驼峰式分隔,不要使用下划线(kubernetes中的组件名称不允许使用下划线)
  3. 命名可以是对项目功能的描述;也可以是一个代号(如神话人物的名字,或者希腊语),适合采用代号的项目有两种,一种是公司的基础组件或者开源项目,一般这种项目都有详细的文档,
  4. 项目名(仓库名)要尽量避免重复,如果可能重复要添加必要的前缀或者后缀做区分。
  5. 命名尽量在三个单词以内。

正确:

  1. useruser-apiuser-service,productproduct-searchredis-go,druidzeuskubernetes.

错误:

  1. user_apiProduct

包名称

保持package的名字和目录保持一致,同一个文件夹所有源文件中的包名必须一致。
包名应该为小写单词,不要使用下划线或者混合大小写。

  1. package domain
  2. package main

文件命名

尽量采取有意义的文件名,简短,有意义,应该为小写单词,使用下划线分隔各个单词。

  1. approve_service.go

结构体命名

  • 采用驼峰命名法,首字母根据访问控制大写或者小写
  • struct 申明和初始化格式采用多行,例如下面:

    1. type MainConfig struct {
    2. Port string `json:"port"`
    3. Address string `json:"address"`
    4. }
    5. config := MainConfig{"1234", "123.221.134"}

    接口命名

  • 命名规则基本和上面的结构体类型

  • 单个函数的结构名以 “er” 作为后缀,例如 Reader , Writer 。
    1. type Reader interface {
    2. Read(p []byte) (n int, err error)
    3. }

    变量命名

    和结构体类似,变量名称一般遵循驼峰法,首字母根据访问控制原则大写或者小写,但遇到特有名词时,需要遵循以下规则:
  1. 如果变量为私有,且特有名词为首个单词,则使用小写,如 appService
  2. 若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头
  3. 作用域越小,命名应该越简短。如在for循环内部用i表示index。
    1. var isExist bool
    2. var hasConflict bool
    3. var canManage bool
    4. var allowGitHook bool

    常量命名

    常量均需使用全部大写字母组成,并使用下划线分词
    1. const APP_URL = "https://www.baidu.com"
    如果是枚举类型的常量,需要先创建相应类型:
    1. type Scheme string
    2. const (
    3. HTTP Scheme = "http"
    4. HTTPS Scheme = "https"
    5. )

    错误处理

  • 错误处理的原则就是不能丢弃任何有返回err的调用,不要使用 _ 丢弃,必须全部处理。接收到错误,要么返回err,或者使用log记录下来
  • 尽早return:一旦有错误发生,马上返回
  • 尽量不要使用panic,除非你知道你在做什么
  • 错误描述如果是英文必须为小写,不需要标点结尾
  • 采用独立的错误流进行处理
    1. // 错误写法
    2. if err != nil {
    3. // error handling
    4. } else {
    5. // normal code
    6. }
    7. // 正确写法
    8. if err != nil {
    9. // error handling
    10. return // or continue, etc.
    11. }
    12. // normal code

    单元测试

    单元测试文件名命名规范为 example_test.go 测试用例的函数名称必须以 Test 开头,例如:TestExample 每个重要的函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试 。

参考

https://github.com/uber-go/guide