这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
课程大纲
- 高质量编程
- 性能优化
高质量编程
高质量代码: 编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码。
代码质量判断: 各种边界条件是否考虑完备、异常情况处理,稳定性保证、易读易维护。
如何编写高质量的 Go 代码:
- 代码格式
- 注释
- 命名规范
- 控制流程
- 错误和异常处理
编程原则:
- 简单性: 消除“多余的复杂性”,以简单清晰的逻辑编写代码不理解的代码无法修复改进
- 可读性: 代码是写给人看的,而不是机器编写可维护代码的第一步是确保代码可读
- 生产力: 团队整体工作效率非常重要
代码规范工具:
- gofmt:Go官方提供的工具,能自动格式化代码;
- goimports:Go官方提供的工具,自动增删依赖的包引用,将依赖包排序并分类,能自动格式化代码;
性能优化
性能优化的前提:满足准确可靠,简介清晰等质量因素;
性能优化建议:
- 使用 Benchmark:Go语言提供的支持基准性能测试的工具;
- 内存预分配:slice,map等数据结构可以预分配内存,减少内存分配次数;
- 使用string.Builder 进行字符串处理:string.Builder底层是byte[],会进行内存预分配,不用每次字符串处理分配内存.
- 空结构体占位: 使用map实现set可以把值设置为空结构体,减少内存占用;
- 使用atomic包: 锁是系统调用,atomic是硬件实现, atomic效率比锁高;
性能调优工具pprof
- 可视化和性能分析的工具;
- CPU 分析: 按照一定的频率采集所监听的应用程序CPU使用情况;
- 内存分析: 在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏;
- 阻塞分析: 记录 goroutine 阻塞等待同步的位置;
- 互斥锁分析: 报告互斥锁的竞争情况;