Golang 命名规则
项目名 | 包名
涉及:
- 项目名称,模块的名称,就是在go.mod里面第一行的名称。
- 包名称:也就是项目中的目录名称(文件夹)。
使用全小写作为名称,应使用短命名(单词音节缩写),不与标准库不要冲突。
特殊的:针对于需要共享的库包名应包含完整的仓库路径。
与标准库冲突的情况可以在包名后增加
x
表示扩展,如:net
->netx
。
例:
项目名称: Support Tool Set
缩写无连字符命名: suptoolset
包名称: certificate
简写命名:cert 或 crt
包名称:strings
标准库重名命名:stringsx 或 strx
共享库仓库及项目名称:mygroup/project
仓库地址为:domain.com
库模块名称: domain.com/mygroup/project
文件名
文件名称应使用小写,单词之间使用下划线(_
)作为连字符,对于长单词应该对其缩写,通过文件名应能看出文件内容,其中测试文件应以test
单词作为结尾。
例:
文件名:user service
连字符缩写: usr_svc.go
测试文件名称:user service test
缩写连字符test结尾: usr_svc_test.go
常量 | 变量
常量和变量命名都使用驼峰法命名,根据是否对外可见来判断是否使用大写字母开头,变量名称应该能够表达其代表意义,长度适中。
特殊的:对于
例:
var simpleValue int
var (
privateMyValue string
PublicMyValue string
)
const simpleConstValue string = "Vaue"
const (
privateConstValue = "private const value"
PublicConstValue = "public const value"
)
结构体 | 接口
结构体、接口命名应该使用名词或名词短语,命名不能与包名称相同。多单词名称应使用驼峰法命名,根据是否对外暴露来决定是否大写首字母。
特殊的:如果结构体内包含需要JSON序列化的字段,那么请大写这些字段的名称,并使用tag
标记这些字段的序列化名称。
例:
包名: container
package container
type CommonInterface interface { }
type ContainerBuilder struct {
ExportVal1 string `json:"exportVal1"`
innerVal2 string
}
方法
方法名应该是动词或动词短语,使用驼峰法命名,根据是否对外暴露来决定是否大写首字母。
对于结构体或别名的方法:
- 结构体参数要么都使用值, 要么都用指针,保持统一。
- 结构体方法参数,使用结构体首字母小写作为参数,方法内不应该出现
this
等命名。
例:
type User struct { }
func (u *User) getName() string {
return "john"
}
func GetUserById(id int) (*User, error) {
return nil, nil
}
注释
处APIDoc导出注释外,注释一律全用行注释(//
)
例:
// 我要说的话有很多
// 所以我现在分行书写
// 每行注释的内容不应该太多
// 要注意在适当的时候换行
换行与风格
对于单行代码不应该超过 80个字符,超过的应该手动换行,针对于函数调用的场景可以使用下面规则:
- 针对于参数进行换行,每个参数后接
,
然后换行(最后一个参数接)
) - 对于内容相互关联的参数可以放在同一行。
- 参数换行之后应该与第一个参数位置对齐。
例:
func CallThisIsLongNamedFunc(paramter000, paramter111, paramter222 string, pointParameter unsafe.Pointer, memorySpaceLength uint64,lastParameter string);
换行
func CallThisIsLongNamedFunc(
paramter000,
paramter111,
paramter222 string,
pointParameter unsafe.Pointer, memorySpaceLength uint64,
lastParameter string)
实际项目中非特殊情况不应该使用这么长的参数列表和参数名以及函数名称。
参考文献
[1]. rectinajh . go语言中文网 . https://studygolang.com/articles/25466
上一篇: PHP递归创建多级目录(一道面试题的解题过程),php递归
下一篇: python中变量的命名规则