1 高质量编程
1.1 简介
高质量的标准:
- 编写的代码正确可靠、简洁清晰
- 代码各种边界条件是否考虑完备
- 异常情况的处理和稳定性的保证
- 易读易维护
编程原则:
- 简单性
- 以简单清晰的逻辑编写代码
- 不理解的代码无法修复改进
- 可读性
- 代码是写给人看的,而不是机器
- 编写可维护代码的第一步是确保代码可读
- 生产力
- 需要保证团队整体的工作效率
1.2 编码规范
主要的规范:
- 代码格式
- 代码格式的控制可以使用Go语言官方推出的工具
gofmt,也可以使用goimports,额外增加了依赖包管理的功能。
- 代码格式的控制可以使用Go语言官方推出的工具
- 注释:包中声明的每个公共符号(变量、常量、函数等)必须给予注释
- 解释代码作用
- 解释代码执行原理
- 解释代码实现的原因
- 解释何时会出错
- 命名规范
- 缩略词全大写,但当其位于变量开头且不需要导出时全小写
- 尽量包含更多的上下文信息
- 控制流程
- 处理逻辑的时候尽量走直线,避免复杂的嵌套分支
- 要提升代码的可维护性和可读性
- 故障问题大多出现在复杂的条件语句和循环语句中
- 错误和异常处理
- 对于简单错误
- 优先使用
errors.New创建匿名变量来直接表示简单错误 - 用
fmt.Errorf控制格式
- 优先使用
- 复杂错误
- 可以进行Wrap和Unwrap,实际上是提供了一个error嵌套另一个error的能力,从而生成一个error的跟踪链
- 在
fmt.Errorf中使用%w关键字可以将一个错误关联到错误链中 - 用
errors.Is判断是否为特定错误 - 用
errors.As获取错误链上特定种类的错误
- panic仅用于真正异常的情况
- 对于简单错误
defer语句会在函数返回前调用,多个defer语句是后进先出的。
2 性能优化
- 性能优化的前提是满足正确可靠、简洁清晰等质量因素
- 性能优化是综合评估,有时候时间效率和空间效率可能处于对立状态
- 性能优化要依靠数据而非猜测、要定位最大瓶颈而非细枝末节
- 不要过早、过度优化
Go语言提供了支持基准性能测试的 benchmark 工具,调用指令:go test -bench=. -benchmem
对于slice和map,预分配好空间可以减少内存拷贝和Rehash的消耗。
要注意避免一些常见的性能陷阱。
可以利用性能分析工具pprof来实现对性能的判断。该工具的功能如下图: