错误处理
一、错误基础
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 错误设计
- 错误类型设计
- 错误语义清晰
- 可恢复性判断