Go 错误处理
Go 把错误处理设计成普通返回值的一部分,强调显式检查、就地处理和清晰控制流。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go MOC
- 前置概念: Go 函数, Go 流程控制
- 并列概念: Go 的 defer、panic 与 recover
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不是日常业务错误处理的主通道- 返回零值加错误是常见模式,但零值必须能表达“这次结果无效”