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

142 阅读2分钟

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

1高质量编程

1.1 简介

      高质量代码:正确可靠、简洁清晰

正确性:是否考虑各种边界条件,错误的调用是否能够处理

可靠性:异常情况或错误处理策略是否明确,依赖的服务出现异常是否能处理

简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支持

清晰:其他人在阅读理解代码的时候是否能清楚明白,重构或者修改功能是否不会担心出现无法预料的问题

1.2 编码规范

      1.代码格式:gofmt

      2.注释:代码作用、实现、原因、异常、公共符号

      3.命名规范:变量、函数、包

      4.控制流程:避免嵌套、最小缩进

      5.错误和异常处理:errors.New、fmt.Errorf(“%w”,err)、errors.Is、errors.As;用error代替panic;当前goroutine的defer函数中使用recover

1.3 性能优化建议

      1.Benchmark

      2.Slice预分配内存,用copy替代re-slice

      3.Map预分配内存

      4.字符串处理:使用strings.Builder

      5.使用空结构体节省内存

      6.atomic包

 

2性能调优实战

2.1 性能调优原则

      1.基于数据        2.定位最大瓶颈       3.避免过早优化       4.避免过度优化

2.2 性能分析工具pprof

      分析:网页、可视化终端

      展示:Top、调用图、火焰图FrameGraph、源码Source、反汇编Disassemble

      工具:runtime/pprof、net/http/pprof

      采样:CPU、堆内存Heap、协程、锁Mutex、阻塞、线程创建

2.3 性能调优案例

1.业务服务优化:建立服务性能评估手段;分析性能数据,定位性能瓶颈;重点优化项改造;优化效果验证

2.基础库优化:分析基础库核心逻辑和性能瓶颈,设计完善改造方案,数据按需获取,数据序列化协议优化;内部压测验证;推广业务服务落地验证

3. Go语言优化:优化内存分配策略;优化代码编译流程,生成更高效的程序;内部压测验证;推广业务服务落地验证