Go高质量编程 | 青训营笔记

88 阅读2分钟

这是我参与 [第三届青训营 -后端场]笔记创作活动的第4篇笔记 编写更简洁清晰的代码

常用优化手段

性能分析工具

了解性能优化的原则和流程(针对服务总体)

高质量编程

简介

  • 正确可靠:出错..没事
  • 简洁,清晰:其他人能明白,进行重构,性能优化,(影响范围,,)

规范

  • 代码格式
  • 注释
  • 命名规范
  • 控制流程
  • 错误异常处理

代码格式(插件

gofmt自动格式化代码

注释

提供额外的上下文信息

  • 代码是最好的注释(简洁的代码)
  • 注释应该提供代码未表达出的上下文信息(为什么这么做)

解释代码作用

公共符号,注释与函数名/变量名信息,公共符号始终要注释

解释代码如何做的

解释代码实现原因

解释代码什么情况会出错

限制条件,使用

命名规范

降低理解成本

  • 简洁(i,index)作用范围
  • deadline,t(t损失了信息)

函数

http.serve

http.serveHTTP

缩写:大家都认识

控制流程

减小嵌套

优先处理错误情况(正常代码路径为..)

错误和异常处理

简单错误,匿名errors.New

复杂错误:错误跟踪连fmt.Errof %w

错误判断: errors.ls 是否有

错误判定: errors.AS 取出特定内容 .Path

panic: 搞不了了...尽量不用

recover:范围,当前goroutine的被defer的函数中生效

优化How

Benchmark

Slice make初始化时尽量提供容量信息 扩容,复制...

map 预分配内存(预估)

string + string.Builder bytes.BBuffer(底层字节数组) Grow函数预分配内存,减小内存分配次数

空间

空结构体

不占据空间

有语义

多线程编程

atomic(硬件)

锁实现(os)

性能调优实战

原则

  • 依靠数据不是猜测
  • 定位最大瓶颈,不是细节
  • 不要过早优化.(系统不稳定,用户不多,快出现问题再优化)
  • 别过度优化(特定优化手段,无法兼容调整)

简介

分析工具pprof实战

性能调优实战