高质量编程与性能调优实战 | 青训营笔记

97 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。

image.png 本次课程主要包括两大部分:高质量编程,性能调优实战

高质量编程

编码规范

  • 代码格式 使用gofmt自动格式化代码,使用goimports工具进行包导入管理(可以自动导入包,去除不适用的包,并按字典序排列,节省时间)

image.png

  • 注释
    • 注释应该解释代码作用
    • 注释应该解释代码如何做的
    • 注释应该解释代码实现的原因
    • 注释应该解释代码什么情况会出错 小结:
  1. 代码是最好的注释
  2. 注释应该提供代码来表达出的上下文信息
  • 命名规范
    • 核心目标是降低阅读理解代码的成本
    • 重点考虑上下文信息,设计简洁清晰的名称
  • 控制流程
    • 线性原理,处理逻辑尽量走直线,避免复杂的嵌套分支
    • 正常流程代码沿着屏幕向下移动
    • 提升代码可维护性和可读性
    • 故障问题大多出现在复杂的条件语句和循环语句中
  • 错误和异常处理
    • error尽可能提供简明的上下文信息链,方便定位问题
    • panic用于真正异常的情况
    • recover生效范围,在当前goroutine的被defer的函数中生效

性能优化建议

  • 使用Benchmark来衡量性能表现
  • Slice预分配内存以减少内存申请,提高运行速度
  • Slice使用copy替代re-slice来减少内存占用,节省内存空间
  • Map预分配内存
  • 字符串处理使用strings.Builder
  • 空结构体节约内存,利用其语义特征,同时不耗费资源(利用map实现set)
  • atomic包原子化操作提高性能

性能调优实战

简介

  • 性能调优原则
    • 要依靠数据不是猜测
    • 要定位最大瓶颈而不是细枝末节
    • 不要过早优化
    • 不要过度优化

性能分析工具pprof

$ go mod init github.com/wolfogre/go-pprof-practice
$ go mod tidy