【青训营笔记】go语言高质量编程与性能调优

34 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

高质量编程

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

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

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

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

需要注意的点:

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

代码格式: image.png 注释:

  1. 注释应该解释代码作用
  2. 注释应该解释代码如何做的
  3. 注释应该解释代码实现的原因
  4. 注释应该解释代码什么情况会出错
  5. 注释应该提供代码未表达出的上下文信息 6
    命名规范

image.png

image.png 函数 image.png 包名 image.png 控制流程

避免嵌套,保持正常流程清晰

image.png 尽量保持正常代码路径为最小缩进

即:优先处理错误情况/特殊情况,尽早返回或继续循环来减少嵌套

错误和异常处理

image.png

image.png

image.png

image.png

image.png

image.png

image.png

性能优化

Benchmark

image.png

Silce优化

  • 根据使用场景尽可能在使用make()初始化切片时提供合适的容量。
  • 在有已有的切片下,我们可以同它来构建一个切片,而不是重新创建一个。

map优化

  • 根据使用场景尽可能在时提供合适的容量。

string优化

image.png

strings.Buffer更快的原因

bytes.Buffer转化为字符串时重新申请了一块空间,而strings.Builder直接将底层的[]byte转换成了字符串类型返回

image.png

image.png

pprof工具

image.png pprof采样过程和原理

CPU

image.png

image.png 线程/协程

image.png

image.png