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

90 阅读2分钟

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

高质量编程

编程原则

  • 简单性:不被理解的代码无法进行修复改进,所以要消除多余的复杂性,用最简洁清晰的逻辑写代码
  • 可读性:读代码的是程序员而不是机器,因此要确保代码可读
  • 生产力:保证团队整体的工作效率也尤为重要

推荐工具

golang基本设置

image.png gofmt

image.png go官方提供的工具,能自动格式化代码为官方统一风格

goimport

image.png 相当于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 地址。