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

70 阅读2分钟

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

什么是高质量编程

  1. 正确性:是否考虑各种边界条件,错误的调用是否能够处理
  2. 可靠性:异常情况或者错误的处理策略是否明确,依赖的服务出现异常是否能够处理
  3. 简洁:逻辑是否简单,后续调整功能或新增功能是否能够快速支持
  4. 清晰:其他人在阅读理解代码的时候是否能清楚明白,重构或者修改功能是否不会担心出现无法预料的问题

一、编码规范

gofmt自动格式化代码

注释的规范

  • 解释代码作用
  • 解释代码如何做的
  • 解释代码实现的原因
  • 解释代码什么情况会出错

命名规范

  • 简洁胜于冗长
  • 缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写
  • 变量距离其被使用的地方越远,则需要携带越多的上下文信息
  • 函数不携带包名的上下文信息
  • 包名小写,不要和标准库同名

控制流程

  • 避免嵌套,保持流程清晰
  • 正常的流程沿着屏幕向下移动

错误和异常处理

二、性能优化建议

性能优化要用数据衡量,这里使用基准测试进行性能测试

slice

  • 尽量对切片预分配内存,定义容量cap,可以省去很多分配空间的消耗
  • 对于在已有切片上创建切片不建议直接切,原来的切片底层数组不会被释放,建议使用copy()函数,原切片就会被回收

map

  • 尽量预分配内存

string

struct{}(空结构体,不占任何空间)

  • 配合map:只关心key不关心value
make(map[string]struct{})
  • 配合chan,只起到通知信号的作用,一般是无缓冲的chan
make(chan struct{})