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 // 请求体过大 // 服务端错误 (2000-2999) -> 5xx HTTP 状态码 CodeInternalError = 2001 // 内部服务器错误 CodeDatabaseError = 2002 // 数据库错误 CodeRedisError = 2003 // Redis 错误 CodeServiceUnavailable = 2004 // 服务不可用 CodeTimeout = 2005 // 请求超时 CodeTaskQueueError = 2006 // 任务队列错误 // 向后兼容的别名(供现有代码使用) CodeBadRequest = CodeInvalidParam // 别名:参数验证失败 CodeAuthServiceUnavailable = CodeServiceUnavailable // 别名:认证服务不可用 ) // errorMessages 错误消息映射表(中文) var errorMessages = map[int]string{ CodeSuccess: "成功", CodeInvalidParam: "参数验证失败", CodeMissingToken: "缺失认证令牌", CodeInvalidToken: "无效或过期的令牌", CodeUnauthorized: "未授权访问", CodeForbidden: "禁止访问", CodeNotFound: "资源未找到", CodeConflict: "资源冲突", CodeTooManyRequests: "请求过多,请稍后重试", CodeRequestTooLarge: "请求体过大", 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" // 默认为错误级别 }