这是我参与 [第三届青训营 -后端场]笔记创作活动的第4篇笔记 编写更简洁清晰的代码
常用优化手段
性能分析工具
了解性能优化的原则和流程(针对服务总体)
高质量编程
简介
- 正确可靠:出错..没事
- 简洁,清晰:其他人能明白,进行重构,性能优化,(影响范围,,)
规范
- 代码格式
- 注释
- 命名规范
- 控制流程
- 错误异常处理
代码格式(插件
gofmt自动格式化代码
注释
提供额外的上下文信息
- 代码是最好的注释(简洁的代码)
- 注释应该提供代码未表达出的上下文信息(为什么这么做)
解释代码作用
公共符号,注释与函数名/变量名信息,公共符号始终要注释
解释代码如何做的
解释代码实现原因
解释代码什么情况会出错
限制条件,使用
命名规范
降低理解成本
- 简洁(i,index)作用范围
- deadline,t(t损失了信息)
函数
http.serve
http.serveHTTP
包
缩写:大家都认识
控制流程
减小嵌套
优先处理错误情况(正常代码路径为..)
错误和异常处理
简单错误,匿名errors.New
复杂错误:错误跟踪连fmt.Errof %w
错误判断: errors.ls 是否有
错误判定: errors.AS 取出特定内容 .Path
panic: 搞不了了...尽量不用
recover:范围,当前goroutine的被defer的函数中生效
优化How
Benchmark
Slice make初始化时尽量提供容量信息 扩容,复制...
map 预分配内存(预估)
string + string.Builder bytes.BBuffer(底层字节数组) Grow函数预分配内存,减小内存分配次数
空间
空结构体
不占据空间
有语义
多线程编程
atomic(硬件)
锁实现(os)
性能调优实战
原则
- 依靠数据不是猜测
- 定位最大瓶颈,不是细节
- 不要过早优化.(系统不稳定,用户不多,快出现问题再优化)
- 别过度优化(特定优化手段,无法兼容调整)