这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
高质量编程及性能调优
01. 高质量编程
-
代码正确可靠,简洁清晰:
(1) 边界完备
(2) 异常处理稳定
(3) 易读易维护
-
编程规范:
- 代码格式: 推荐使用gofmt
- 注释:
(1) 适合注释公共符号
(2) 注释解释代码的过程
(3) 注释解释代码的外部因素,提供额外上下文
(4) 注释代码的限制条件
- 变量命名
- 控制流程
(1) 尽量保证正常的执行流程最短。
- 错误和异常处理
(1) 错误判定 error: errors.is / errors.as
(2) 不建议在业务代码中使用panic,用于真正异常的情况
(3) recover 只能在defer函数中使用。可以提供更多的上下文。 (defer是后进先出的)
-
性能优化建议
(benchmark) 使用: go test -bench=. -benchmem
- slice 预分配内存 (原因是不内存不够会去扩容,就会速度慢)
-
(1) 尽可能在使用make() 初始化切片时提供容量信息
-
(2) 在原有大内存上创建小内存,不会导致大内存释放
- 字符串处理: 使用string. Builder
- 使用空结构体节省内存
- 多线程使用atomic包(比用加锁的方法性能更好)
02. 性能调优实战
-
性能分析工具pprof实战
go tool pprof http://localhost:6060/debug/pprof/profile
flat: 函数自身cpu消耗 \ cum: 函数本身 + 其调用函数的消耗
list Eat
打开浏览器看内存占用 go tool pprof http://localhost:6060/debug/pprof/heap -http:8081
协程(查看函数调用情况) go tool pprof http://localhost:6060/debug/pprof/goroutine -http:8081
以及mutex/block等不同的函数,可以调用的函数如下图显示
-
pprof 采样过程和原理
-
性能调优案例