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

84 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

高质量编程

虽然语言千变万化,但是高质量代码是相似的。

简单性

你写的不简单,别人就没法看懂,没法维护。要消除多余的复杂性。

可读性

代码是给人看的,不是给机器看的。 容易维护的第一步就是保证可读性。

生产力

要让其他人快速上手。

编码规范

编码规范对团队合作是很重要的。

代码格式:go fmt。这方面go比较方便。

注释:好的代码有很多注释。坏的代码需要很多注释。

截屏2022-05-08 下午11.30.32.png

对于第一点,主要是函数开头写的那种注释。

第二点主要是解释一些子函数。

第三点是解释一下上下文关系,为什么要这么写。

第四点是给一些异常例子。

一言以蔽之,注释要给出代码没表达出来的信息。好的注释就是代码本身。

命名:一个变量作用的范围越远,名字就要越长,携带越多的上下文信息。当然lecture里介绍了很多命名规范。不过有些我觉得不是很适应,见仁见智。

好的命名就像好的笑话,如果必须解释他,就不好笑了。

缩进:有异常的话尽早返回。

异常:在go里尽量不要使用panic。有error的话,能解决的简单error尽早解决。

性能调优思考方向(针对go)

注意,必须先看会不会影响业务、有没有必要之类的。

benchmark工具

go的test有自带的性能分析工具。

内存回收

注意让大对象及时的被回收。比如一个底层数组如果对应多个切片的话,可能会导致数组没有被及时回收。

字符串拼接

strings.builder方法。注意可以用grow预分配空间。

空结构体

空结构体不占用任何内存空间。可以节省资源,也可以表示占位符。

性能优化

截屏2022-05-09 上午12.07.15.png

性能分析工具 proof

截屏2022-05-09 上午12.08.42.png 具体的工具使用就不在这里展开了。

比较惊喜的是介绍了pprof之类的工具的实现方法。具体就是每个一段时间进行一次采样。采样的方法是向操作系统发送SIGPROF信号。