这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。
本次课程主要包括两大部分:高质量编程,性能调优实战
高质量编程
编码规范
- 代码格式 使用gofmt自动格式化代码,使用goimports工具进行包导入管理(可以自动导入包,去除不适用的包,并按字典序排列,节省时间)
- 注释
- 注释应该解释代码作用
- 注释应该解释代码如何做的
- 注释应该解释代码实现的原因
- 注释应该解释代码什么情况会出错 小结:
- 代码是最好的注释
- 注释应该提供代码来表达出的上下文信息
- 命名规范
- 核心目标是降低阅读理解代码的成本
- 重点考虑上下文信息,设计简洁清晰的名称
- 控制流程
- 线性原理,处理逻辑尽量走直线,避免复杂的嵌套分支
- 正常流程代码沿着屏幕向下移动
- 提升代码可维护性和可读性
- 故障问题大多出现在复杂的条件语句和循环语句中
- 错误和异常处理
- error尽可能提供简明的上下文信息链,方便定位问题
- panic用于真正异常的情况
- recover生效范围,在当前goroutine的被defer的函数中生效
性能优化建议
- 使用Benchmark来衡量性能表现
- Slice预分配内存以减少内存申请,提高运行速度
- Slice使用copy替代re-slice来减少内存占用,节省内存空间
- Map预分配内存
- 字符串处理使用strings.Builder
- 空结构体节约内存,利用其语义特征,同时不耗费资源(利用map实现set)
- atomic包原子化操作提高性能
性能调优实战
简介
- 性能调优原则
- 要依靠数据不是猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化
性能分析工具pprof
$ go mod init github.com/wolfogre/go-pprof-practice
$ go mod tidy