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

75 阅读2分钟

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

通过此次课程的收获:

  • 如何编写更简洁清晰的代码
  • 常用Go语言程序优化手段
  • 熟悉Go程序性能分析工具
  • 了解工程中性能优化的原则和流程

1.高质量编程

1.1 高质量编程简介

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

高质量代码需要满足的条件:

  • 正确性:是否考虑各种边界条件,错误的调用是否能够处理;

  • 可靠性:异常情况或者错误的处理策略是否明确,依赖的服务出现异常是否能够处理;

  • 简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支持;

  • 清晰:其他人在阅读代码的时候是否能清楚明白,重构或修改功能是否不用担心出现无法预料的问题。

编程原则:

  • 简单性:消除“多余的复杂性”,以简单清晰的逻辑编写代码;不理解的代码无法修复改进

  • 可读性:代码是写给人看的,而不是机器;编写可维护代码的第一步是确保代码可读

  • 生产力:团队整体工作效率非常重要

1.2 编码规范

如何编写高质量的Go代码?有一些公认的开源的编码规范可以提供我们参考,像一些公司内部也有自己的编码规范。

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

1.3 性能优化建议

  • 性能优化的前提是满足正确可靠、简洁清晰等质量因素
  • 性能优化是综合评估,有时候时间效率和空间效率可能对立,所谓时间换空间空间换时间

*性能优化建议-Benchmark工具

benchmark可以得到测试结果,也可以统计内存信息;可以通过benchmark结果对比分析不同代码的性能表现。

*性能优化建议-slice

slice是go中最常用的结构,也很方便,使用过程中有注意:

第一条建议就是预分配,尽可能在使用make()初始化切片时提供容量信息,特别是在追加切片时; 对比看下两种情况的性能表现,左边是没有提供初始化容量信息,右边是设置了容量大小; 结果中可以看出执行时间相差很多,预分配只有一次内存分配.

*性能优化建议-map

map也是编程中常用的结构,不断向map中添加元素的操作会触发map的扩容;

提前分配好空间可以减少内存拷贝和Rehash的消耗;

建议根据实际需求提前预估好需要的空间.