| 这个作业属于哪个课程 | 2021春软件工程实践S班 |
|---|---|
| 这个作业要求在哪里 | 团队作业六——Beta冲刺+事后诸葛亮 |
| 这个作业的目标 | 代码规范 |
代码规范
1. 编程规约
(一)Gofmt
所有的提交代码都应该通过检测,保存的时候运行 goimports
(二)命名风格
注意:一个名字在程序包之外的可见性是由它的首字符是否为大写来确定的,谨慎命名。
-
包名
- 包名必须全部为小写单词,无下划线,越短越好。尽量不要与标准库重名。
- 禁止通过中划线连接多个单词的方式来命名包名。
- 包名尽量与所在目录名一致。
-
.go文件名
- 文件名必须为小写单词,允许加下划线组合方式,但是头尾不能为下划线。
- 非测试文件禁止以_test.go命名。
-
常量
- 常量、枚举名采用大小写混排的CamelCase模式,不允许出现下划线。
- 禁止在代码中直接使用未经预先定义的常量。如: s :=
"diawhdoah"+ id。 - 按照功能来区分,并建议将公共常量置于私有常量之前。
示例:
const ( KindPage = "page" // The rest are node types; home page, sections etc. KindHome = "home" // Temporary state. kindUnknown = "unknown" // The following are (currently) temporary nodes, // i.e. nodes we create just to render in isolation. kindRSS = "RSS" )- 如果是枚举类型的常量,需要先创建相应类型
示例:
type tstCompareType int const ( tstEq tstCompareType = iota tstNe ) -
变量名
- 变量命名基本上遵循相应的英文表达或简写,严禁使用拼音与英文混合的方式,尽量避免使用拼音。
- 杜绝完全不规范的缩写,避免望文不知义。如:condition“缩写”成 condi。
- 变量名称一般遵循CamelCase法,并且不允许出现下划线。
- 在函数外部申明必须使用var,不要采用:=,容易踩到变量的作用域的问题。
- 全局变量必须为大小写混排的CamelCase模式,不允许出现下划线。首字母根据作为范围确定大小写。
示例:
var Global int //包外 var global int //包内- for循环变量可以使用单字母。
-
结构体(struct)
- 结构体名必须为大小写混排的驼峰模式,不允许出现下划线,可被包外部引用则首字母大写;如仅包内使用,则首字母小写。
示例:
type ServicePlan struct type internalBroker struct -
接口
- 接口名必须为大小写混排,支持包外引用则首字母大写,仅包内使用则首字母小写。不能有下划线,整体必须为名词。
-
函数和方法名
- 函数名必须为大小写混排的驼峰模式。
- 方法接收名必须为大小写混排,首字母小写CamelCase格式。方法接收者命名要能够体现接收者对象。
- 接收者名不要使用me,this 或者 self 这种泛指的名字。
-
参数名
- 参数名必须为大小写混排,且首字母小写,不能有下划线。
-
返回值
- 返回值如果是命名的,则必须大小写混排,首字母小写。
- 函数的返回值应避免使用命名的参数。
(三)语法规定
- 在系统致命错误以外的地方不应该使用
panic。应该将错误作为返回值返回给上一级。 - 更多参考Go 经典译文:Uber 开源的《Go 语言编码规范》,开发中尽量避免
bad操作。
(四)注释
注释统一使用双斜杠注释法
- 所有权注释:双斜杆+空格+所有权说明
- 函数说明注释:双斜杆+空格+函数名+函数说明(位于函数正头顶一行)
- 其他注释:双斜杆+空格+说明解释(尽量言简意赅)
每位成员按照要求规范自己的代码,并及时使用工具内的fmt自动调整代码,其余部分由组内相互审查对方的代码规范。
2. 单元测试
- 单元测试是可以重复执行的,不能受到外界环境的影响。
- 单元测试粒度一般是方法级别。
- 新增代码及时补充单元测试,如果新增代码影响了原有单元测试,及时修正。
- 单元测试应该是全自动执行的,并且非交互式的。不应该使用
fmt.Println。