这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记
1、高质量编程
高质量编程简介
编写的代码正确可靠、简洁清晰
- 边界条件
- 异常处理、稳定保证
- 易读易维护 原则
- 简单性,消除“多余的复杂性”,以便维护和排查问题
- 可读性,代码是给人看的
- 生产力,团队整体工作效率很重要
编码规范
注意代码格式、注释、命名规范、控制流程、错误和异常处理等
使用gofmt,goimports(管理依赖包)
注释解释代码作用、代码如何做、代码实现的原因、代码什么情况会出错(限制条件)代码是最好的注释,注释应该提供代码为表达的上下文信息
命名规范:简洁清晰缩略词全大写,但位于开头且不导出时,全小写
当i或index作用域仅在for循环内,使用i更好
function:函数名可不携带包名上下文信息,因为包名和函数名总是成对出现
package只用小写字母,使用单数而不是复数(尽量)
- 核心为降低阅读代码的成本,重点考虑上下文信息,设计简洁清晰的名称
控制流程:如果两个分支都包含return,可去掉else,尽量保持正常代码路径为最小缩进(注意嵌套层数),故障问题大多出现在复杂度条件语句和循环中
错误处理:不建议在业务中使用panic,建议使用error代替panic。recover只能在被defer的函数中使用
性功能优化建议
前提是正确可靠、简洁清晰,有时空间和时间效率对立
slice和map预分配内存,尽可能使用make(),这样时间效率会提升很多,字符串拼接(+)每次都会重新分配内存
多线程:atomic包
- 避免常见性能陷阱,同时不用一味的追求程序的性能,前提:正确可靠、简洁清晰
2、性能调优实战
性能调优简介
原则:依靠数据而不是猜测、定位最大瓶颈而不是细枝末节、不要过早优化、不要过度优化
性能分析工具pprof实战
pprof可以分析性能、分析数据,能够显示在什么地方耗费了多少CPU、Memory
pprof工具使用如top可以看出性能消耗最大的程序
浏览器打开http://localhost:6060/debug/pprof/
flat==cum,函数没有调用其他函数
flat==0,函数中只有其他函数的调用
- go tool pprof -http=:8081 "http://localhost:6060/debug/pprof/heap"
- 该命令查看内存消耗
- alloc_objects:程序累计申请对象数
- alloc_space:程序累计申请内存大小
- inuse_objects:程序当前持有对象数
- inuse_space:程序当前占用内存的大小 改pprof命令的后缀:内存heap,协程goroutine,锁mutex,阻塞block
性能优化案例
大业务中比较实用
- 业务服务优化
流程:建立性能评估手段(压测等)->定位问题所在(pprof等)->改造优化