Golang 命名规范

Posted by Wang Gang on 2019-08-21

命名原则

  • 惯性:同一个意义在不同地方,环境应该有同样的命名
  • 短小: 不能太过长,不然读者只关注名字,而非逻辑(ps:申明位置和使用位置越远,命名应当越长)
  • 精确: 易读,易理解

命名方式

采用驼峰命名方式(ps:ServiceName),不要使用service_name
缩写要全大写(ServerHTTP)

局部变量

局部变量尽量短小,i代替index
如果函数过长,则需要对代码进行重构

参数

函数参数默认是具有文档性质
当参数类型具有描述性时,则参数应当尽量短小

1
2
func AfterFunc(d Duration, f func()) *Timer
func Escape(w io.Writer, s []byte)

当参数类型很模糊,则可以使用参数去描述

1
2
func Unix(sec, nsec int64) Time
func HasPrefix(s, prefix []byte) bool

返回值

返回值可以定义名字,作为文档性质,特别是在外部可见的函数

1
2
func Copy(dst Writer, src Reader) (written int64, err error)
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)

方法接收

1
2
3
func (b *Buffer) Read(p []byte) (n int, err error)
func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request)
func (r Rectangle) Size() Point

需要注意的是,方法接收者的名字在同一类型的不同方法中应该保持统一,这也是前文所述的一贯性的需求

包级别的命名方式

尽量采用bytes.Bufferstrings.Read()
不宜采用bytes.ByteBufferstrings.StringsRead()

接口类型

只含有一个方法的接口类型通常以函数名加上er后缀作为名字

1
2
3
type Reader interface {
Read(p []byte) (n int, err error)
}

接口多比接口少好

Error命名

1
2
3
type ExitError struct {
....
}

包命名

应当与它导出代码的内容相关,避免utilcommon这种宽泛的命名

引入路径

  • 包路径的最后一个单词应该和包名一致
  • 包路径应该尽可能简洁
  • 记得把库的主要代码直接放在代码库的根目录
  • 避免在包路径中使用任何大写字母(并非所有文件系统都区分大小写)

参考文章

参考来源: http://zablog.me/2017/09/08/go_tricks_and_tips_2/