# Go 错误处理与鲁棒性检查清单

## 错误传播

- 返回错误时是否保留根因，是否使用 `fmt.Errorf("...: %w", err)` 做包装。
- 上层是否通过 `errors.Is` / `errors.As` 判断语义错误，避免字符串匹配。
- 是否存在吞错（记录日志但继续返回 nil）导致失败不可见。

## 失败边界与恢复

- 对外部依赖（DB、RPC、HTTP）的失败是否有超时、重试上限与退避策略。
- 重试是否满足幂等约束，是否可能放大副作用。
- panic 风险路径是否可通过边界校验避免，必要 recover 是否在明确边界层处理。

## 输入校验与契约

- 入参是否在边界层完成最小必要校验，避免非法值深入核心逻辑。
- 零值语义是否明确（如空切片与 nil 切片、0 与未设置）。
- 错误码或错误类型是否稳定，避免破坏调用方处理逻辑。

## 可运行性

- 关键失败路径是否有可执行测试覆盖（单测或集成测试）。
- 监控告警依赖的错误日志是否包含足够上下文并保持结构一致。
