Go开发规范与调优 | 青训营笔记

79 阅读4分钟

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

今天我学习了Go基础课的五六七八节,四个视频时长合计大约为120分钟,其中我收获到许多高质量编程的编码规范,并且学会了使用性能分析工具pprof进行排查消耗资源的情况。

一、本堂课重点内容:

  • 本堂课的知识要点有哪些?
    第五节课当中首先由高质量的概念、编程原则的三方面引入,在各个方面通过代码规范来达到高质量编程的目的,(代码规范的核心目标是降低阅读理解代码的成本)例如代码格式、注释、命名、流程、异常处理等方面来进行规范,重点要考虑的是清晰的上下文与简洁的命名。
    另外,还讲了一些性能优化方面的的代码规范写法。
    第六七八节课讲了性能分析工具pprof的各种方面的用法:用Assert测试、用Mock测试,最后还介绍了一下基准测试,后面又用一个生动形象的示例项目讲解了一下具体的用法。

二、详细知识点介绍:

  • 本堂课介绍了哪些知识点?

第五节课教会了我高质量编程的代码规范、性能优化的代码规范。

  1. 好的代码需要有简单性、可读性、兼顾生产力,即:消除“多余的复杂性”,消除难以理解的逻辑,让其他人能够看懂,尽量使得其可以提升团队的工作效率。
  2. 可以使用gofmt工具自动格式化Go代码为官方统一风格。
  3. 好的注释要解释代码作用、工作方式、实现原因、可能出错的情况
  4. 命名要尽量简洁、考虑上下文信息
  5. 处理逻辑尽量走直线,避免复杂的分支,提升可维护性和可读性
  6. error尽量提供上下文,panic用于真正异常的情况,recover生效范围

第六七八节课提出了性能优化的原则,以及几个性能优化的方法

  1. 要依靠数据不是猜测、要定位最大瓶颈而不是细枝末节、不要过早优化
  2. 使用benchmark测试性能
  3. 尽量用make预指定数组长度,尽量用copy代替re-slice
  4. 使用+拼接字符串性能最差,strings.Buffer更快
  5. 使用空结构体做占位符节省内存
  6. 使用atomic包优化线程锁

三、实践练习例子:

  • 有什么实践举例帮助理解知识点?
    这里需要感谢掘金团队学习课件中含有炸弹代码并导致性能问题的一个学习项目,用于Pprof的使用当中对于工具的学习理解,如果有后来人也可以就此拉取Git项目:
    github.com/wolfogre/go…

四、课后个人总结:

  • 本章有什么知识点不容易掌握?
    可能atomic包较难掌握吧,因为涉及到了锁,在课件和课程当中也仅仅是简单地略过了,希望以后我自己可以在具体实践中加深对这部分的知识印象吧……
  • 什么地方容易与其他内容混淆?
    感觉也许性能调优和编码规范有人会混为一谈也说不定……?
    从时间上来看:编码规范是在编码之前就要掌握的并在编码中付诸实践,而性能调优可以认为是在编码之后回来改代码。

五、引用参考:

  • 我参考了哪些外部博客/笔记/文章?
    我参考了掘金内部课中的Go基础课程,也就是此次掘金内部课程:
    juejin.cn/course/byte…
    另外还参考了Foxtail-Grass Studio的专辑封面,作为此次笔记的封面
  • 文章中有什么地方是我参考引用了外部博客/笔记/文章的?
    主要是课程的主要知识点总结,采用了一边阅读课件一边记录的方式进行了个人的一些学习总结。