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

25 阅读2分钟

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

1.    高质量编程

高质量:正确可靠,简洁清晰

l  正确:各种边界条件是否考虑完备

l  可靠:异常情况处理,稳定性保证

l  简洁清晰:易读易维护

编码规范:

代码格式:

推荐使用gofmt自动格式化代码

image.png

注释:

库中的任何函数都要对功能予以注释

注释应该做的:

解释代码作用:适合注释公共符号;

解释代码如何做的

解释代码实现的原因:适合脱离上下文环境就很难明白的代码

解释代码什么情况会出错:适合解释代码的限制条件

 

命名规范:

变量:简洁胜于冗长,缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写;

使用ServerHTTP而不是ServerHttp。

image.png

image.png 控制流程:

避免嵌套

image.png

优先处理错误情况/特殊情况,尽早返回或继续循环来减少嵌套

错误和异常处理:尽量避免panic

 

2.    性能优化

benchmark工具

gotest -bench=. -benchmem

image.png

image.png

slice预分配内存:尽可能在Make()初始化切片时提供容量信息。

切片是数组的一个引用,包含数组指针,长度,容量。

map预分配内存:data := make(map[int]int, size)

使用strings.Builder:strings.Builder和bytes.Buffer底层都是[]byte数组。

使用空结构体:空结构体不占用内存空间。

实现Set:

多线程编程:使用atomic包

image.png

image.png

3.    性能调优实战

image.png

3.1 性能分析工具pprof

image.png

image.png

image.png 查看耗时主要在哪?

image.png

image.png

image.png Flat==Cum:函数中没有调用其他函数

Flat==0:函数中只有其他函数的调用

image.png

找到耗时最长的代码,修改或注释

 

查看内存占用主要在哪?

image.png  

image.png

image.png 注释掉这部分代码,即可修复成功

 

网页端的直观视图:web命令(pprof命令行下)

3.2 性能调优案例

业务服务优化:

image.png

基础库优化

Go语言优化