04 高质量编程及性能优化 | 青训营

98 阅读2分钟

1 高质量编程

1.1 简介

高质量的标准:

  • 编写的代码正确可靠、简洁清晰
  • 代码各种边界条件是否考虑完备
  • 异常情况的处理和稳定性的保证
  • 易读易维护

编程原则:

  • 简单性
    • 以简单清晰的逻辑编写代码
    • 不理解的代码无法修复改进
  • 可读性
    • 代码是写给人看的,而不是机器
    • 编写可维护代码的第一步是确保代码可读
  • 生产力
    • 需要保证团队整体的工作效率

1.2 编码规范

主要的规范:

  • 代码格式
    • 代码格式的控制可以使用Go语言官方推出的工具gofmt,也可以使用goimports,额外增加了依赖包管理的功能。
  • 注释:包中声明的每个公共符号(变量、常量、函数等)必须给予注释
    • 解释代码作用
    • 解释代码执行原理
    • 解释代码实现的原因
    • 解释何时会出错
  • 命名规范
    • 缩略词全大写,但当其位于变量开头且不需要导出时全小写
    • 尽量包含更多的上下文信息
  • 控制流程
    • 处理逻辑的时候尽量走直线,避免复杂的嵌套分支
    • 要提升代码的可维护性和可读性
    • 故障问题大多出现在复杂的条件语句和循环语句中
  • 错误和异常处理
    • 对于简单错误
      • 优先使用errors.New创建匿名变量来直接表示简单错误
      • fmt.Errorf控制格式
    • 复杂错误
      • 可以进行Wrap和Unwrap,实际上是提供了一个error嵌套另一个error的能力,从而生成一个error的跟踪链
      • fmt.Errorf中使用%w关键字可以将一个错误关联到错误链中
      • errors.Is判断是否为特定错误
      • errors.As获取错误链上特定种类的错误
    • panic仅用于真正异常的情况

defer语句会在函数返回前调用,多个defer语句是后进先出的。

2 性能优化

  • 性能优化的前提是满足正确可靠、简洁清晰等质量因素
  • 性能优化是综合评估,有时候时间效率和空间效率可能处于对立状态
  • 性能优化要依靠数据而非猜测、要定位最大瓶颈而非细枝末节
  • 不要过早、过度优化

Go语言提供了支持基准性能测试的 benchmark 工具,调用指令:go test -bench=. -benchmem

对于slice和map,预分配好空间可以减少内存拷贝和Rehash的消耗。

要注意避免一些常见的性能陷阱。

可以利用性能分析工具pprof来实现对性能的判断。该工具的功能如下图: image.png