这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
本篇文章主要是收集了笔者在学习今天的课程,在学习了一些golang的编程规范后,总结了一些编程质量优化技巧;和golang项目中使用性能分析工具pprof的注意点。
编程质量优化技巧和性能分析工具pprof的使用
编程质量优化技巧
使用make指令时尽量标注容量
在使用slice、map等结构时,需要预分配内存,则在使用 make() 初始化切片时应该尽可能地提供对应的容量信息。
data := make([]int, 0, size)
data := make(map[int]int, size)
使用 strings.Builder作为字符串拼接工具
使用 strings.Builder进行字符串拼接,效率比bytes.Buffer和原生str相加更高。
var builder strings.Builder
for i := 0; i < n; i++ {
builder.WriteString(str)
}
return builder.String()
使用空结构体
使用空结构体节省内存,而不是使用nil、false等作为空值。空结构体不占据内存空间。
以上编程质量优化技巧的事例演示项目:编程质量优化技巧演示项目
性能分析工具pprof的使用
pprof是一个用于可视化和分析性能分析数据的工具,使用golang实现。
但是,pprof 是当程序占用资源异常时才需要启用的工具,且即使发现有一些资源异常占用,也会通过排查代码快速定位,这也导致 pprof 需要上战场的机会少之又少。但是,掌握好pprof的使用方法还是有必要的,毕竟能可视化地查看当前golang项目的各个函数进程的cpu占有、运行时间占用等详细情况,在某个时候还是有很大作用的。
pprof的两种使用方法
- 通过简单的原生Web界面(pprof自带)和终端使用命令
先引入包"net/http/pprof",然后使用代码
http.ListenAndServe("$host:$port", nil)
就可以访问原生web了,网址为:http://127.0.0.1:6060/debug/pprof/ 。在其中可以简略查看CPU使用等情况。
此时还可以使用交互式终端使用命令查看更多信息,例如运行以下命令:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=60
就可以在60秒后查看这段时间内cpu使用的情况。更多命令可以查看官网。
-
PProf 可视化界面
- 第一种方法:
先在单元测试文件的目录中,生成该单元测试文件对应的cpu.prof文件,可以运行以下代码:
go test -bench=. -cpuprofile=cpu.prof然后就可以调用指令,根据cpu.prof文件启动可视化界面:
go tool pprof -http=:$port cpu.prof- 第二种方法:
直接安装pprof插件,按照相同的步骤生成cpu.prof文件然后也可以启动可视化界面了。
在PProf 可视化界面中,可以以网状图、表格、火焰图等多种可视化显示,形象地展示当前golang项目的各个函数进程的cpu占有、运行时间占用等详细情况。
另外,笔者的测试环境里,在下载graphviz后,idea内的终端奇怪地用不了graphviz库的dot指令,而外部终端却可以。很奇怪,等之后再继续研究。