编程规约
命名风格
- 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
反例:_name
/__name
/$name
/name_
/name$
/name__
- 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。
正例:renminbi / alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3 - 【强制】公用的变量、类型、接口、结构、函数以及结构体的成员变量等命名使用 UpperCamelCase 风格,但以下情形例外:DO 等。
正例:GolangStruct / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:Golangstruct / UserDo / XMLService / TCPUDPDeal / TAPromotion - 【强制】私有的变量、类型、接口、结构、函数以及参数名、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
正例: localValue / getHttpMessage() / inputUserId - 【强制】常量命名命名使用 UpperCamelCase 风格,并使用 const 声明,力求语义表达完整清楚,不要嫌名长。
正例:const StatusOK = 200 - 抽象结构命名使用 Abstract 或 Base 开头;
异常类命名使用 Err 结尾;
测试类命名以 Test 开头,以它要测试的函数的名称结尾。
正例:ParamsErr := errors.New(“params err”) - 接口命名规范一般使用 er 结尾:
单个函数的接口名以“er”作为后缀,接口的实现则去掉 er;
两个函数的接口名综合两个函数名,以 er 作为后缀,接口的实现则去掉 er ;
三个以上函数的接口,抽象这个接口的功能,类似于结构体命名。
正例:Writer
/WriteReader
/Ioer
- 数据和切片类型命名以 Arr 结尾,map 类型以 Map 结尾。相同功用的结构体可以根据功能采用相同的结尾,【强制】Api 请求以
Req
结尾,相应以Res
结尾,数据结构体以xxxModel
结尾,xxx即为数据表名。
正例:var userArr [3]string / type LoginReq struct{} / type UserDO struct{} - 返回结果主要为布尔类型的函数,函数名可以 is、has 等开头
- 【强制】工程名统一使用小写,单词之间使用
-
分割。包目录名一律使用小写,尽量采用一个单词命名,单词间不用符号分割,统一使用单数形式,但是结构体名如果有复数含义,结构体名可以使用复数形式。包目录下的包名(package namepackage
),如非main
函数,和包目录名保持一直且单词间用_
分隔,测试文件以_test
结尾。
正例:db-utils /package db_utils
/package db_utils_test
反例:services - 【强制】杜绝完全不规范的缩写,避免望文不知义,五个字母及以下单词不可缩写。
- 为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意。
反例:var a int 的随意命名方式。 - 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。如规范【8】所示。
正例:startTime / startDate
反例:startedAt / startDt - 如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。
说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。 - 【参考】各层命名规约:
A) Service/DAO 层方法命名规