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

70 阅读2分钟

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

高质量编程与性能调优

编程原则

  1. 简单性

    消除“多余的复杂性”,以简单清晰的逻辑编写代码

  2. 可读性

  3. 生产力

编码规范

注释:

  1. 注释应该解释代码作用, 适合注释公共符号

  2. 注释应该解释代码如何做的,适合注释实现过程

  3. 注释应该解释代码实现的原因,适合解释代码的外部因素,提供额外的上下文。

  4. 注释应该解释代码什么情况会出错,适合解释代码的限制条件。

  5. 公共符号始终需要注释

    PS:代码是最好的注释,注释应提供代码未表达出的上下文信息。

变量命名:

  1. 简洁
  2. 缩略词全部大写,当其位于变量开头其不需要导出时,全部小写
  3. 变量与实际使用位置距离越远,需要携带的上下文信息越多

函数命名:

  1. 函数名不携带包名的上下文信息
  2. 简短
  3. 当名为foo的包某个函数返回类型Foo时,可以省略类型信息。

包名:

  1. 只由小写字母组成。不包含大写字母和下划线等字符
  2. 简短并包含一定上下文信息
  3. 不要与标准库同名

控制流程:

  1. 线性原理,避免嵌套
  2. 正常代码最小缩进

性能优化

Go提供benchmark工具进行基准性能测试

go test -bench=. -benchmen

性能优化建议

预分配

尽量在make阶段确定切片/对象大小

slice进行扩容时会在已有切片基础上创建切片,不会创建新的底层数组。

场景

  1. 原切片较大,代码在原切片基础上新建小切片
  2. 原底层数组在内存中有引用,得不到释放

此时可以使用copy代替re-slice

空结构体

使用空结构体节省内存

空结构体struct{}实例不占据任何的内存空间

使用场景:

  • 节省资源
  • 空结构体本身具备很强的语义,可以作为占位符使用

atomic

锁是通过操作系统来实现,属于系统调用

atomic操作通过硬件实现,效率更高

sync.Mutex应该用于保护一段逻辑,而不仅仅是用于保护一个变量