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

68 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

课程大纲

  1. 高质量编程
  2. 性能优化

高质量编程

高质量代码: 编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。

代码质量判断: 各种边界条件是否考虑完备、异常情况处理,稳定性保证、易读易维护。

如何编写高质量的 Go 代码:

  • 代码格式
  • 注释
  • 命名规范
  • 控制流程
  • 错误和异常处理

编程原则:

  • 简单性: 消除“多余的复杂性”,以简单清晰的逻辑编写代码不理解的代码无法修复改进
  • 可读性: 代码是写给人看的,而不是机器编写可维护代码的第一步是确保代码可读
  • 生产力: 团队整体工作效率非常重要

代码规范工具:

  • gofmt:Go官方提供的工具,能自动格式化代码;
  • goimports:Go官方提供的工具,自动增删依赖的包引用,将依赖包排序并分类,能自动格式化代码;

性能优化

性能优化的前提:满足准确可靠,简介清晰等质量因素;

性能优化建议:

  • 使用 Benchmark:Go语言提供的支持基准性能测试的工具;
  • 内存预分配:slice,map等数据结构可以预分配内存,减少内存分配次数;
  • 使用string.Builder 进行字符串处理:string.Builder底层是byte[],会进行内存预分配,不用每次字符串处理分配内存.
  • 空结构体占位: 使用map实现set可以把值设置为空结构体,减少内存占用;
  • 使用atomic包: 锁是系统调用,atomic是硬件实现, atomic效率比锁高;

性能调优工具pprof

  • 可视化和性能分析的工具;
  • CPU 分析: 按照一定的频率采集所监听的应用程序CPU使用情况;
  • 内存分析: 在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏;
  • 阻塞分析: 记录 goroutine 阻塞等待同步的位置;
  • 互斥锁分析: 报告互斥锁的竞争情况;