2.2.5.1. 【必须】error处理

• error作为函数的值返回,必须对error进行处理, 或将返回值赋值给明确忽略。

• error作为函数的值返回且有多个返回值的时候,error必须是最后一个参数。

// 不要采用这种方式
func do() (error, int) {

}
// 要采用下面的方式
func do() (int, error) {

}

• 错误描述不需要标点结尾。

• 采用独立的错误流进行处理。

// 不要采用这种方式
if err != nil {
  // error handling
} else {
  // normal code
}

// 而要采用下面的方式
if err != nil {
  // error handling
  return // or continue, etc.
}
// normal code

• 如果返回值需要初始化,则采用下面的方式:

x, err := f()
if err != nil {
  // error handling
  return // or continue, etc.
}
// use x

• 错误返回的判断独立处理,不与其他变量组合逻辑判断。

// 不要采用这种方式:
x, y, err := f()
if err != nil || y == nil {
  return err  // 当y与err都为空时,函数的调用者会出现错误的调用逻辑
}

// 应当使用如下方式:
x, y, err := f()
if err != nil {
  return err
}
if y == nil {
  return fmt.Errorf("some error")
}

• 【推荐】建议go1.16以上,error生成方式为:fmt.Errorf(”module xxx: %w”, err)