01 高质量编程
什么是高质量
- 各种边界条件是否考虑完备
- 异常情况处理,稳定性保证
- 易读易维护
如何编写高质量的go代码
代码格式
推荐使用go fmt自动格式化代码
注释
- 注释应该解释代码作用
- 注释应该解释代码如何做的
- 注释应该解释代码实现的原因
- 注释应该解释代码什么情况会出错
- 公共符号始终要注释
编码规范
命名规范 / 控制流程 / 错误和异常处理 /
- error尽可能提供简明的上下文信息链,方便定位问题
- panic用于真正异常的情况
- recover生效范围,在当前goroutine的被defer的函数中生效
性能优化建议
go benchmark来测试性能
slice预分配内存
- 不断向map中添加元素的操作会触发map的扩容
- 提前分配好空间可以减少内存拷贝和rehash的消耗
使用strings.Builder
使用空结构体节省内存
使用atomic包取代加锁
02 性能调优实战
性能调优原则
- 要依靠数据不是猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化
性能分析工具pprof