这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
一、本堂课重点内容
本堂课的知识要点有哪些?
-
高质量编程
- 高质量编程简介 - 编码规范 - 性能优化建议 -
性能调优实战
- 性能调优 - 性能分析工具 pprof实战 - 性能调优案例
二、详细知识点介绍
本堂课介绍了哪些知识点?
1. 高质量编程
高质量编程简介
编程原则
- 简单性
- 可读性
- 生产力
编码规范
- 代码格式 gofmt
- 注释
- 命名规范
- 控制流程
- 错误和异常处理
性能优化建议
-
简介
- 性能优化的前提是满足正确可靠,简洁清晰等质量因素 - 性能优化是综合评估,有时候时间效率和空间效率可能对立 - 针对Go语言特性,介绍Go相关的性能优化建议 -
Benchmark
- go test -bench=. -benchmem
-
Slice
- slice 预分配内存
- 另一个陷阱:大内存未释放
-
Map
- map 预分配内存
-
字符串处理
- 使用string.Builder
-
空结构体
- 使用空结构体节省内存
-
atomic包
-
小结
- 避免常见的性能陷阱可以保证大部分程序的性能 - 普通应用代码,不要一味地追求程序的性能 - 越高级的性能优化手段越容易出现问题 - 在满足正确可靠、简洁清晰的质量要求的前提下提高程序性能
2. 性能调优实战
性能调优原则
- 要依靠数据不是猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早和过度优化
性能分析工具 pprof实战
- pprof功能简洁
性能调优案例
实践准备 (必须)
- 克隆 github.com/wolfogre/go… 到本地,保证能够编译运行
- 尝试使用 test 命令,编写并运行简单测试 go.dev/doc/tutoria…
- 尝试使用 -bench 参数,对编写的函数进行性能测试,pkg.go.dev/testing#hdr…
推荐阅读
- Go 代码 Review 建议github.com/golang/go/w…
- Uber 的 Go 编码规范,github.com/uber-go/gui…