高质量编程遵循的原则是相通的 简单性
- 消除多余的复杂性,以简单清晰的逻辑编写代码
- 不理解的代码无法进行修改
可读性
- 代码是写给人看的
- 编写可维护代码的第一步是确保代码可读 生产力 1.团队整体工作效率非常重要
1编码规范-代码格式
使用gofmt自动格式化代码
gofmt
是Go语言官方提供的工具,能自动格式化Go语言代码为官方统一风格,常见IDE都支持方便的配置
goimports
也是Go语言官方提供的工具,实际上等于gofmt加上依赖包管理,自动增删依赖的包引用将依赖包按字母序排序并分类
2编码规范-注释
好的注释应该做到
- 解释代码的作用
- 解释代码如何做的
- 解释代码实现的原因
- 解释代码什么情况会出错 5.应该提供代码未表达出的上下文信息
3编码规范-命名规范
variable
-
简介胜于冗长
-
缩略词全大写,但其位于变量开头且不需要导出时,使用全小写
比如使用ServeHTTP而不是ServeHttp
使用XMLHHTTPRequest而不是xmlHTTPRequest
3.变量距离其被使用的地方越远,则需要携带越多的上下文信息
全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义
function
- 函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的
- 函数名尽量短
- 当名为foo的包某个函数返回类型Foo时,可以省略类型信息
- 当名为foo的包某个函数返回类型T时,可以在函数中加入类型信息
package
- 只由小写字母组成,不包含大写字母和下划线等字符
- 简短并含有一定的上下文信息,例如schema、task等
- 不要与标准库重名
尽量满足以下规则
- 不使用常用变量名作为包名,例如使用bufio而不是buf
- 尽量使用单数而不是复数,例如使用encoding而不是encodings
- 谨慎使用缩写
编码规范-控制流程
- 避免嵌套,保持正常流程清晰
- 尽量保持正常代码路径为最小缩进,优先处理错误情况、特殊情况,尽早返回或继续循环来减少嵌套
编码规范-错误和异常处理
-
error尽可能提供简明的上下文信息链,方便定位问题
-
panic用于真正异常的情况
-
recover生效范围,在当前goroutine的被defer的函数中生效