Go 错误处理

Go 把错误处理设计成普通返回值的一部分,强调显式检查、就地处理和清晰控制流。

#type / concept #status / growing #tech / dev #resource / go

[!info] related notes

Go 错误处理

一句话定义

Go 错误处理的核心是把错误当成普通返回值显式传递和检查,而不是默认依赖异常机制来中断控制流。

核心机制 / 工作原理

Go 最常见的错误处理模式是:

value, err := doSomething()
if err != nil {
    return err
}

这套模式背后的设计倾向是:

  • 错误是常规路径的一部分
  • 调用者对失败处理负有明确责任
  • 代码通过提前返回保持扁平

Go 的 error 本身是接口,这意味着:

  • 具体错误类型可以携带更多上下文
  • 调用方既可以只按 error 抽象处理,也可以做更细分类

最小例子 / 最小场景

func loadUser(id int) (User, error) {
    if id <= 0 {
        return User{}, errors.New("invalid id")
    }
    return User{ID: id}, nil
}

这里的核心不是“怎么 new 一个错误”,而是:

  • 成功和值一起返回
  • 失败时仍走普通返回通道

Go 风格里最重要的错误处理习惯

  • 错误尽量尽早处理
  • 不要把大量逻辑包在深层 if else
  • 在边界处补上下文,在底层保留事实

边界与易混淆点

  • 业务错误和程序崩溃不是一回事
  • panic 不是日常业务错误处理的主通道
  • 返回零值加错误是常见模式,但零值必须能表达“这次结果无效”
创建于 2026/6/20 更新于 2026/6/20