这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
在实际的开发中,团队协作是必不可少的。好的代码可以提高团队工作的效率,同时降低出现问题的概率。因此本文将介绍关于Go的高质量编程的内容。
编程原则
- 简单性:以简单清晰的逻辑编写代码,复杂的代码更难以维护
- 可读性:确保代码可读,方便日后对代码的维护
- 生产力:注重团队整体工作,保证团队格式的统一
编码规范
- 代码格式
gofmt:Go语言官方提供的工具,能自动格式化Go语言代码为官方统一风格
goimports:Go语言官方提供的工具,在gofmt的基础上还能自动增删依赖的包引用、将依赖包按字母序排序并分类
- 注释规则
公共符号需要注释代码作用
实现过程需要注释代码如何做的
代码逻辑含有外部因素时需要注释代码实现的原因
有关代码限制条件时需要注释代码在什么情况下出错
- 命名规范
- 变量:
缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写
变量距离其被使用的地方越远,则需要携带越多的上下文信息
- 函数:
函数名不需要携带包名的上下文信息
函数名应尽量简短
函数返回类型与包名一致时可省略类型信息
- 包:
只由小写字母组成
简短并包含一定上下文信息
不能与标准库同名
不适用常用变量名作为包名
使用单数而不是复数
谨慎使用缩写
- 控制流程
避免嵌套,保持正常流程清晰
尽量保持正常代码路径为最小缩进
线性原理,处理逻辑尽量走直线
- 错误和异常处理
- 简单错误:
优先使用errors.New来创建匿名变量来直接表示
fmt.Errorf可以格式化输出错误
- 错误跟踪链:
Wrap:提供了一个error嵌套另一个error的能力,由此形成一个跟踪链。在fmt.Errorf中使用%w来将一个错误关联进错误链e.g. fmt.Errorf("err:",err)
Unwrap:用于忽略对于错误信息进行的扩展
**errors包的详细内容可在”Go语言基础语法(二) | 青训营笔记“中查看
- panic:
在程序启动阶段发生不可逆转的错误时,可以在init或main函数中使用panic
- recover:
只能在被defer的函数中使用
嵌套无法生效
只在当前goroutine生效
总结
编码规范能提高代码的质量。我印象最深刻的是控制流程部分,在学校的日常编码中我们大多关注的是写出函数实现功能,而对于函数内部的执行顺序没有深究,这可能导致程序逻辑变得复杂,以至于一段时间之后再去看那段代码自己都难以理清逻辑。总而言之,在之后的编码中我将更多的注意编码的规范,提高自己的代码质量。