1、高质量代码规范
编程原则:简单性,可读性,生产力
注释:公共符号始终要注释,应该提供代码上下文未表达出的信息
自动格式化规范工具:gofmt,goimports
命名规范:简洁易读,大小写规则,上下文信息含义(变量,函数,库包)
控制流程:避免嵌套(去除多余else),最小缩进(优先处理错误/特殊退出情况,减少嵌套),直线逻辑
错误与异常处理:简单错误(errors.New),错误判定(errors.Is,errors.As),业务中用error替代panic,recover,defer后进先出
2、代码性能优化
综合评估:
Benchmark: 基准性测试
Slice预分配内存:尽量使用make()初始化切片提供容量信息--扩容时性能下降 & 大内存未释放(copy数组高效)
map预分配内存:扩容与rehash也降低性能,提早预分配
使用strings.Builder:>ByteBuffer>>>直接+拼接(因为每次+都会重新分配内存,builder,buffer底层都是数组,使用内存扩容策略,不用每次都重新分配内存)
空结构体:struct {} 占位符,不占任何内存,或用set替代map(只需值不用键时)
Atomic包:通过硬件实现性能优化,效率比锁高,保护逻辑
避免常见的性能陷阱即可保证大部分程序的性能。
3、性能优化分析工具
靠数据,定位最大瓶颈,不要过早/过度优化
pprof工具排查: top, heap堆内存,goroutine协程,mutex锁,block阻塞
4、案例实践
采样过程与工作原理:/
优化流程:业务服务优化,基础库优化,Go语言优化。在保证功能正确前提下优化。
业务服务优化:建立评估手段(压测报告等),定位性能瓶颈(如使用库规范,高并发场景),重点改造(新旧响应数据diff对比),效果验证(再次对比新旧压测报告),进一步优化(链路分析)
基础库优化:AB test -- 库改造,数据按需获取,数据序列化协议优化
Go语言优化: 编译器 & 运行时优化 -- 优化内存分配策略+编译流程