# 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 注释(仅在有意忽略时)