高质量编程
-
高质量
-
编写的代码能够达到正确可靠、简洁清晰的目的。
-
高质量编程原则:
简单性:逻辑简单清晰,消除多余的复杂。
可读性:人可看懂,编写可维护代码
生产力:团队整体工作效率很重要
-
-
编码规范
- 代码格式:推荐使用gofmt自动格式化代码。
- 注释:注解代码作用、如何做、如何实现以及出错情况。
- 命名规范:对于变量,应尽量简洁,缩略词大写,全局变量在名字上需要更多的上下文信息,使得可以在其他地方轻易辨认出其含义;对于函数,应尽量简短,可不携带上下文信息(包名和函数名成对出现);对于package只由小写字母组成,不包含大写字母和下划线,且不要与标准库同名。
- 控制流程:避免嵌套,保持正常流程清晰;尽量保持正常代码路径为最小缩进。
- 错误和异常处理:error尽可能提供上下文信息方便排查问题;panic用于真正异常的情况,可用defer和recover捕获错误。
-
性能优化简易
- benchmark用于基准测试性能
- slice和map预分配内存,如slice和map分配内存时,尽可能一次分配足够的内容,避免频繁的扩容,较少拷贝和rehash的消耗。
- 字符串处理,用+拼接性能很差,建议使用strings.Builder或strings.Buffer,避免使用+拼接每次重新分配内存。
- 使用空结构体节省内存,空结构体struc{}不占内存空间,如在map中用其做占位符。
- 使用atomic包,通过硬件实现效率比锁高。
性能调优实战
-
性能调优原则
要依赖数据而不是猜测
要定位最大瓶颈而不是细枝末节
不要过早优化
不要过度优化
-
性能分析工具pprof
- pprof是一种性能分析工具,它可以用于分析程序的 CPU 使用率、内存分配、锁竞争等性能方面的信息,从而帮助开发人员进行性能优化和问题定位。
-
pprof提供了一系列的函数和工具,可以将程序的性能数据输出到文件,然后使用工具进行分析和可视化。
常用的
pprof函数和命令行工具有:-
runtime/pprof包:这个包提供了一系列函数,如StartCPUProfile和StopCPUProfile,可以用来生成 CPU 使用率的分析数据。还有WriteHeapProfile函数,用于生成内存分配数据。你可以将这些数据输出到文件,然后使用其他工具进行分析。 -
go tool pprof命令:这是 Go 语言自带的一个命令行工具,可以用来分析和可视化pprof生成的性能数据文件。你可以通过命令行直接使用它,例如:go tool pprof cpu.pprof:分析 CPU 使用率数据go tool pprof mem.pprof:分析内存分配数据 -
Web 接口:
net/http/pprof包提供了一个 HTTP 服务器,可以通过浏览器访问分析结果。你可以在代码中导入这个包,并将它添加到你的 HTTP 处理器中。使用
pprof可以帮助你定位代码中的性能问题,找出瓶颈,了解内存分配情况,查看 goroutine 使用情况等。但是需要注意,pprof也会有一些性能开销,所以在生产环境中使用时要谨慎。更多关于pprof的详细信息可以在官方文档中找到。在学习过程中,掌握常用的pprof工具功能,灵活运用pprof工具分析解决性能问题,了解pprof的采样过程和工作原理。
学习感悟
在高性能编程和性能调优实战这一章节,更需要比较深的知识储备。不同的应用场景可能会有不同的优化策略,因此不断学习和实践是提升性能编程能力的关键。在实践中积累经验,不断学习,与时俱进!
-