这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
通过此次课程的收获:
- 如何编写更简洁清晰的代码
- 常用Go语言程序优化手段
- 熟悉Go程序性能分析工具
- 了解工程中性能优化的原则和流程
1.高质量编程
1.1 高质量编程简介
什么是高质量: 编写的代码能够达到正确可靠、简洁清晰的目标。
高质量代码需要满足的条件:
-
正确性:是否考虑各种边界条件,错误的调用是否能够处理;
-
可靠性:异常情况或者错误的处理策略是否明确,依赖的服务出现异常是否能够处理;
-
简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支持;
-
清晰:其他人在阅读代码的时候是否能清楚明白,重构或修改功能是否不用担心出现无法预料的问题。
编程原则:
-
简单性:消除“多余的复杂性”,以简单清晰的逻辑编写代码;不理解的代码无法修复改进
-
可读性:代码是写给人看的,而不是机器;编写可维护代码的第一步是确保代码可读
-
生产力:团队整体工作效率非常重要
1.2 编码规范
如何编写高质量的Go代码?有一些公认的开源的编码规范可以提供我们参考,像一些公司内部也有自己的编码规范。
- 代码格式
- 注释
- 命名规范
- 控制流程
- 错误和异常处理
1.3 性能优化建议
- 性能优化的前提是满足正确可靠、简洁清晰等质量因素
- 性能优化是综合评估,有时候时间效率和空间效率可能对立,所谓时间换空间空间换时间
*性能优化建议-Benchmark工具
benchmark可以得到测试结果,也可以统计内存信息;可以通过benchmark结果对比分析不同代码的性能表现。
*性能优化建议-slice
slice是go中最常用的结构,也很方便,使用过程中有注意:
第一条建议就是预分配,尽可能在使用make()初始化切片时提供容量信息,特别是在追加切片时; 对比看下两种情况的性能表现,左边是没有提供初始化容量信息,右边是设置了容量大小; 结果中可以看出执行时间相差很多,预分配只有一次内存分配.
*性能优化建议-map
map也是编程中常用的结构,不断向map中添加元素的操作会触发map的扩容;
提前分配好空间可以减少内存拷贝和Rehash的消耗;
建议根据实际需求提前预估好需要的空间.