package errors // 错误码定义 const ( // 成功 CodeSuccess = 0 // 客户端错误 (1000-1999) -> 4xx HTTP 状态码 CodeInvalidParam = 1001 // 参数验证失败 CodeMissingToken = 1002 // 缺失认证令牌 CodeInvalidToken = 1003 // 无效或过期的令牌 CodeUnauthorized = 1004 // 未授权 CodeForbidden = 1005 // 禁止访问 CodeNotFound = 1006 // 资源未找到 CodeConflict = 1007 // 资源冲突 CodeTooManyRequests = 1008 // 请求过多 CodeRequestTooLarge = 1009 // 请求体过大 // RBAC 相关错误 (1010-1099) CodeAccountNotFound = 1010 // 账号不存在 CodeAccountDisabled = 1011 // 账号已禁用 CodeAccountDeleted = 1012 // 账号已删除 CodeUsernameExists = 1013 // 用户名已存在 CodePhoneExists = 1014 // 手机号已存在 CodeInvalidPassword = 1015 // 密码格式不正确 CodePasswordTooWeak = 1016 // 密码强度不足 CodeParentIDRequired = 1017 // 非 root 用户必须提供上级账号 CodeInvalidParentID = 1018 // 上级账号不存在或无效 CodeCannotModifyParent = 1019 // 禁止修改上级账号 CodeCannotModifyUserType = 1020 // 禁止修改用户类型 CodeRoleNotFound = 1021 // 角色不存在 CodeRoleNameExists = 1022 // 角色名称已存在 CodePermissionNotFound = 1023 // 权限不存在 CodePermCodeExists = 1024 // 权限编码已存在 CodeInvalidPermCode = 1025 // 权限编码格式不正确 CodeRoleAlreadyAssigned = 1026 // 角色已分配 CodePermAlreadyAssigned = 1027 // 权限已分配 // 服务端错误 (2000-2999) -> 5xx HTTP 状态码 CodeInternalError = 2001 // 内部服务器错误 CodeDatabaseError = 2002 // 数据库错误 CodeRedisError = 2003 // Redis 错误 CodeServiceUnavailable = 2004 // 服务不可用 CodeTimeout = 2005 // 请求超时 CodeTaskQueueError = 2006 // 任务队列错误 ) // errorMessages 错误消息映射表(中文) var errorMessages = map[int]string{ CodeSuccess: "成功", CodeInvalidParam: "参数验证失败", CodeMissingToken: "缺失认证令牌", CodeInvalidToken: "无效或过期的令牌", CodeUnauthorized: "未授权访问", CodeForbidden: "禁止访问", CodeNotFound: "资源未找到", CodeConflict: "资源冲突", CodeTooManyRequests: "请求过多,请稍后重试", CodeRequestTooLarge: "请求体过大", CodeAccountNotFound: "账号不存在", CodeAccountDisabled: "账号已禁用", CodeAccountDeleted: "账号已删除", CodeUsernameExists: "用户名已存在", CodePhoneExists: "手机号已存在", CodeInvalidPassword: "密码格式不正确", CodePasswordTooWeak: "密码强度不足", CodeParentIDRequired: "非 root 用户必须提供上级账号", CodeInvalidParentID: "上级账号不存在或无效", CodeCannotModifyParent: "禁止修改上级账号", CodeCannotModifyUserType: "禁止修改用户类型", CodeRoleNotFound: "角色不存在", CodeRoleNameExists: "角色名称已存在", CodePermissionNotFound: "权限不存在", CodePermCodeExists: "权限编码已存在", CodeInvalidPermCode: "权限编码格式不正确(应为 module:action 格式)", CodeRoleAlreadyAssigned: "角色已分配", CodePermAlreadyAssigned: "权限已分配", CodeInternalError: "内部服务器错误", CodeDatabaseError: "数据库错误", CodeRedisError: "缓存服务错误", CodeServiceUnavailable: "服务暂时不可用", CodeTimeout: "请求超时", CodeTaskQueueError: "任务队列错误", } // GetMessage 获取错误码对应的消息 // lang 参数暂时保留以便未来支持多语言,目前仅支持中文 func GetMessage(code int, lang string) string { if msg, ok := errorMessages[code]; ok { return msg } // 未定义的错误码返回默认消息 if code >= 2000 && code < 3000 { return "内部服务器错误" } return "请求处理失败" } // GetHTTPStatus 将错误码映射为 HTTP 状态码 func GetHTTPStatus(code int) int { switch code { case CodeSuccess: return 200 // OK case CodeInvalidParam, CodeRequestTooLarge: return 400 // Bad Request case CodeMissingToken, CodeInvalidToken, CodeUnauthorized: return 401 // Unauthorized case CodeForbidden: return 403 // Forbidden case CodeNotFound: return 404 // Not Found case CodeConflict: return 409 // Conflict case CodeTooManyRequests: return 429 // Too Many Requests case CodeServiceUnavailable: return 503 // Service Unavailable case CodeTimeout: return 504 // Gateway Timeout default: // 服务端错误(2000-2999)默认映射为 500 if code >= 2000 && code < 3000 { return 500 // Internal Server Error } // 客户端错误(1000-1999)默认映射为 400 if code >= 1000 && code < 2000 { return 400 // Bad Request } // 其他未知错误默认为 500 return 500 // Internal Server Error } } // GetLogLevel 将错误码映射为日志级别 // 返回值: "warn" (客户端错误), "error" (服务端错误), "info" (成功) func GetLogLevel(code int) string { if code == 0 { return "info" // 成功 } if code >= 2000 && code < 3000 { return "error" // 服务端错误 } if code >= 1000 && code < 2000 { return "warn" // 客户端错误 } return "error" // 默认为错误级别 }