Go 语言代码规范
代码风格
大部分格式问题都可以通过 gofmt 解决,gofmt 自动格式化代码,保证所有的go代码与官方推荐的格式保持一致,于是所有格式有关问题,都以gofmt的结果为准。 不同的编辑器有不同的配置, sublime的配置教程:http://michaelwhatcott.com/gosublime-goimports/
- LiteIDE默认已经支持了goimports,如果你的不支持请点击属性配置->golangfmt→勾选goimports保存之前自动fmt你的代码
- 使用 vim 开发请安装插件:https://github.com/fatih/vim-go 或者 coc.nvim + gopls
- 使用 vscode 开发请直接安装里面的 Go 插件:https://github.com/golang/vscode-go
命名规则
Go语言程序员推荐使用 驼峰式 命名,当名字有几个单词组成的时优先使用大小写分隔,而不是优先用下划线分隔。 因此,在标准库有 QuoteRuneToASCII 和 parseRequestLine 这样的函数命名,但是一般不会用 quote_rune_to_ASCII 和 parse_request_line 这样的命名。 而像ASCII和HTML这样的缩略词则避免使用大小写混合的写法,它们可能被称为htmlEscape、HTMLEscape或escapeHTML,但不会是escapeHtml。
文件名
以kerbab命名法命名,比如:foo_bar.go
包名 (package)
包名与包所在的目录名一致并小写
结构体 (Struct)
优先以 S 开头,私有struct名以小写 s 开头 遵循CamelCase(驼峰)命名法,由有意义的名词组合而成
接口 (Interface)
遵循CamelCase(驼峰)命名法 优先以 I 开头,私有interface名以小写 i 开头 , 比如:IModelManager
函数或方法
- 遵循CamelCase(驼峰)命名法,由有意义的英文单词拼接而成
- 若函数或方法为判断类型(返回值主要为 bool 类型),则名称应以 Has, Is, Can 或 Allow 等判断性动词开头:
func HasPrefix(name string, prefixes []string) bool { ... }
func IsEntry(name string, entries []string) bool { ... }
func CanManage(name string) bool { ... }
func AllowGitHook() bool { ... }
- 必须以动词开头,如Get/Set/Make/Upload等,从名字能看出该方法实现的功能
常量
- 常量均需使用全部大写字母组成,并使用下划线分词:
const APP_VER = "0.7.0.1110 Beta"
- 如果是枚举类型的常量,需要先创建相应类型,并且以大写 T(公共类型) 或小写 t(私有类型) 开头:
type TScheme string
const (
HTTP TScheme = "http"
HTTPS TScheme = "https"
)
- 如果模块的功能较为复杂、常量名称容易混 淆的情况下,为了更好地区分枚举类型,可以使用完整的前缀:
type TPullRequestStatus int
const (
PULL_REQUEST_STATUS_CONFLICT TPullRequestStatus = iota
PULL_REQUEST_STATUS_CHECKING
PULL_REQUEST_STATUS_MERGEABLE
)