1.5 KiB
1.5 KiB
Error Handling — Delta
MODIFIED Requirements
Requirement: 使用类型安全错误判断
系统 SHALL 使用类型安全方式判断错误类型,并通过 lint 工具强制执行。
Scenario: 数据库错误判断
- WHEN 判断数据库唯一约束错误
- THEN SHALL 使用 errors.Is(err, gorm.ErrDuplicatedKey)
- THEN SHALL NOT 使用字符串匹配 err.Error()
Scenario: 网络错误判断
- WHEN 判断网络错误
- THEN SHALL 使用 errors.As(err, &net.Error) 判断网络错误
- THEN SHALL 使用 errors.As(err, &net.OpError) 判断操作错误
- THEN SHALL 使用 errors.Is(opErr.Err, syscall.ECONNRESET) 判断连接重置
- THEN SHALL NOT 使用字符串匹配判断错误类型
Scenario: 错误链判断
- WHEN 判断错误链中的特定错误
- THEN SHALL 使用 errors.Is 进行链式判断
- THEN SHALL 使用 errors.As 提取特定类型错误
Scenario: lint 自动拦截错误比较
- WHEN 代码中使用
err == someError直接比较 - THEN errorlint SHALL 检测并报错
- THEN SHALL 改用 errors.Is()
Scenario: lint 自动拦截类型断言
- WHEN 代码中使用
err.(SomeType)直接类型断言 - THEN errorlint SHALL 检测并报错
- THEN SHALL 改用 errors.As()
Scenario: lint 自动拦截忽略错误返回值
- WHEN 代码中使用
_ = funcReturnsError()忽略错误 - THEN errcheck SHALL 检测并报错
- THEN SHALL 正确处理错误或添加 //nolint:errcheck 注释(仅在有意忽略时)