1
0
Files
nex/openspec/changes/backend-code-lint/specs/error-handling/spec.md

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