跳转至

go业务基础库之Error&Context

Error-Background

  • 错误检查和打印
  • 分层开发导致处处打印
  • 难以获取堆栈关联
  • 根因丢失

  • 业务错误处理

  • API 中逻辑标识处理
  • API 中错误消息展示
  • API 中业务的 Hint 数据

Error-Handle Error

  • 追加上下文
  • WithStack/Warp 来保存堆栈
  • WithMessage 来定义消息
// github.com/pkg/errors
_, err := ioutil.ReadAll(r)
if err != nil {
  return errors.Wrap(err, "read failed")
}
  • 根因追踪
  • Cause 获取根因,用于 Sentinel errors 逻辑处理

Error-Best practice

  • 集中处理错误,errorgroup
  • 容易用错返回的context
  • 扇出没有控制
  • 业务代码容易 panic

Error-Handle Error

Context-Background

  • 超时 & 取消
  • 业务库从无到有
  • 可用性:超时
  • 可用性:取消

  • 元数据传递

  • 同进程:同步生命周期传递
  • 同进程:异步生命周期传递
  • 跨进程:网络传递

Context-Context With API