跳到主要内容

错误处理

一、错误基础

1.1 error 接口

  • error 接口定义
  • error 零值
  • nil error

1.2 错误创建

  • errors.New
  • fmt.Errorf
  • 自定义错误类型

1.3 错误处理模式

  • if err != nil
  • 错误传递
  • 错误包装

二、错误处理策略

2.1 错误传播

  • 直接返回
  • 错误注释
  • 错误包装

2.2 错误转换

  • 类型断言
  • errors.As
  • errors.Is

2.3 错误临时性检查

2.4 错误值比较

2.5 panic 和 recover

  • panic 使用场景
  • recover 使用场景
  • defer + recover 模式
  • panic vs error

三、自定义错误

3.1 错误类型定义

  • 结构体错误
  • 错误方法实现

3.2 错误包装

  • Go 1.13 包装特性
  • fmt.Errorf 格式化动词
  • %w vs %v

3.3 错误链

  • Unwrap 方法
  • 错误链遍历
  • 错误根源查找

3.4 错误信息

  • Error() 方法
  • 错误消息格式化
  • 错误详情

四、常见错误处理场景

4.1 文件操作错误

4.2 网络请求错误

4.3 数据库操作错误

4.4 JSON 解析错误

五、错误处理最佳实践

5.1 错误处理原则

  • 尽早返回
  • 错误不忽略
  • 错误上下文保留

5.2 错误日志

  • 错误记录
  • 日志级别
  • 结构化日志

5.3 错误反模式

  • Panic 滥用
  • 错误吞噬
  • 错误忽略

5.4 错误设计

  • 错误类型设计
  • 错误语义清晰
  • 可恢复性判断