高质量编程与性能调优实践 | 青训营

33 阅读2分钟

高质量编程

定义

  • 编写的代码能够达到可靠正确、简洁清晰的目标
  • 各种边界条件是否考虑完备
  • 异常情况处理、稳定性保证
  • 易读易维护

编码规范

  1. 代码格式
    gofmt自动格式化代码
  2. 注释
    解释代码作用、如何做、实现原因、出错情况适合注释公共符号、实现过程、解释代码的外部因素、提供额外上下文、解释代码的限制条件
  3. 命名规范
    变量简洁胜于冗长
    函数名尽量简短,不需携带包的上下文信息
    包名由小写字母构成,简短且包含一定的上下文信息
  4. 控制流程
    避免嵌套,保持正常流程清晰 尽量保持正常代码路径为最小缩进
  5. 错误和异常处理
    优先使用errors.New来创建匿名变量来直接表示简单错误
    使用errors.ls判定一个错误是否为特定错误,使用errors.As来在错误链上获取特定种类的错误

性能优化

Benchmark

建议

  • slice尽可能在make()初始化切片时提供容量信息
  • 使用copy代替re-slice减少大内存未释放的问题
  • map预分配内存,减少内存拷贝和Rehash的消耗
  • 使用strings.Buffer拼接字符串
  • 使用空结构体节省内存
  • 使用atomic包,通过硬件实现,提升效率

性能调优实战

pprof

  • topN可查看占用资源最多的函数
  • list可根据指定的正则表达式查找代码行
  • web可调用关系可视化
  • goroutine可根据火焰图进行分析
  • Block阻塞采样阻塞操作的次数和耗时
  • Mutex锁竞争采样抢锁的次数和耗时

总结

性能调优原则
要靠数据而不是猜测,保证正确性,定位主要瓶颈