这是我参与「第三届青训营 -后端场」笔记创作活动的第二篇笔记
高质量编程
编写的代码能够达到正确可靠,简洁清晰的目标可称之为高质量代码。
编码规范
- [代码格式] 推荐使用gofmt自动格式化代码
- [注释]
- 注释应该解释代码作用
- 注释应该解释代码如何做的
- 注释应该解释代码实现的原因
- 注释应该解释代码什么情况会出错
- [命名规范]
- 简洁胜于繁琐
- 缩略词全大写,但当其位于变量开头且不需要道出时,使用全小写
- 变量距离其被使用的地方越远,则需要携带越多的上下文信息
- [控制流程]
- 线性原理,处理逻辑尽量走直线,避免复杂的嵌套分支
- 正常流程代码沿着屏幕向下移动
- 提升代码可维护性和可读性
- 故障问题大多出现在复杂的条件语句和循环语句中
- [错误和异常处理]
- error 尽可能提供简明的上下文信息链,方便定位问题
- panic 用于真正异常的情况
- recover 生效范围,在当前 goroutine 的被 defer 的函数中生效
性能优化建议
- 避免常见的性能陷阱可以保证大部分程序的性能
- 普通应用代码,不要一味地追求程序的性能
- 越高级的性能优化手段越容易出现问题
- 在满足正确可靠、简洁清晰的质量要求的前提下提高程序性能
性能调优
- 性能调优原则
要依靠数据不是猜测 - 性能分析工具 pprof
- 性能调优
保证正确性
定位主要瓶颈
调优流程
- 定位问题:判端是代码、数据库及中间件配置、操作系统配置、网络配置、硬件配置哪个环节是问题来源,只有找准方向才能找到问题。
- 确定原因,具体到算法、共享锁、SQL效率低、索引、线程数、等待超时时间、带宽哪个环节是问题根源,找到问题原因才有可能解决问题。
- 确定优化目标和方案确定,例如提高吞吐量,缩短响应时间,提高最大并发,这一步是根据实际业务模型做出的战略调整,注意结合实际,切忌异想天开。
- 复测,测试人员使用原来的场景和脚本执行测试,对比测试结果判断是否达到调优目标,没有达到目标就要反复测试贴近目标。
- 分析结果,评估目标是否达到和系统性能改善情况,以此来判断优化调整是否可以结束。