这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
高质量编程
编程原则
- 简单性:不被理解的代码无法进行修复改进,所以要消除多余的复杂性,用最简洁清晰的逻辑写代码
- 可读性:读代码的是程序员而不是机器,因此要确保代码可读
- 生产力:保证团队整体的工作效率也尤为重要
推荐工具
golang基本设置
gofmt
go官方提供的工具,能自动格式化代码为官方统一风格
goimport
相当于gofmt加上依赖包的管理
代码注释
原则
- 解释代码作用
- 解释如何运作
- 解释原因
- 解释什么情况会error 总结就是:在合适的代码附上注释,方便自己也方便后续人员阅读,提供上下文注释可减轻后来人的阅读难度
性能调优
Go语言项目中的性能优化主要有以下几个方面:
- CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据
- Memory Profile(Heap Profile):报告程序的内存使用情况
- Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈
- Goroutine Profiling:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的
pprof工具
Go语言内置了获取程序的运行数据的工具,包括以下两个标准库:
runtime/pprof:采集工具型应用运行数据进行分析net/http/pprof:采集服务型应用运行时数据进行分析 pprof开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取各个函数占用的CPU以及内存资源;最后通过对这些采样数据进行分析,形成一个性能分析报告。
CPU性能分析:
开启与关闭
pprof.StartCPUProfile(w io.Writer)
pprof.StopCPUProfile()
内存性能分析:
记录程序的堆栈信息
pprof.WriteHeapProfile(w io.Writer)
go tool pprof命令
不管是工具型应用还是服务型应用,我们使用相应的pprof库获取数据之后,下一步的都要对这些数据进行分析,我们可以使用go tool pprof命令行工具。
使用方式:
go tool pprof [binary] [source]
其中:
- binary 是应用的二进制文件,用来解析各种符号;
- source 表示 profile 数据的来源,可以是本地的文件,也可以是 http 地址。