errors

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 27, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// 通用错误
	ErrUnknown              = New(ErrCodeUnknown, "未知错误")
	ErrInternal             = New(ErrCodeInternal, "内部错误")
	ErrInvalidArgument      = New(ErrCodeInvalidArgument, "无效参数")
	ErrNotFound             = New(ErrCodeNotFound, "资源未找到")
	ErrPermissionDenied     = New(ErrCodePermissionDenied, "权限被拒绝")
	ErrAuthenticationFailed = New(ErrCodeAuthenticationFailed, "认证失败")
	ErrResourceExhausted    = New(ErrCodeResourceExhausted, "资源耗尽")
	ErrFailedPrecondition   = New(ErrCodeFailedPrecondition, "前置条件失败")
	ErrAborted              = New(ErrCodeAborted, "操作中止")
	ErrOutOfRange           = New(ErrCodeOutOfRange, "超出范围")
	ErrUnimplemented        = New(ErrCodeUnimplemented, "功能未实现")
	ErrUnavailable          = New(ErrCodeUnavailable, "服务不可用")
	ErrDataLoss             = New(ErrCodeDataLoss, "数据丢失")
	ErrDeadlineExceeded     = New(ErrCodeDeadlineExceeded, "超过截止时间")

	// 业务错误
	ErrNoHealthyChannel   = New(ErrCodeNoHealthyChannel, "没有可用的健康通道")
	ErrAdapterNotFound    = New(ErrCodeAdapterNotFound, "未找到适配器")
	ErrModelNotFound      = New(ErrCodeModelNotFound, "未找到模型")
	ErrPlatformNotFound   = New(ErrCodePlatformNotFound, "未找到平台")
	ErrEndpointNotFound   = New(ErrCodeEndpointNotFound, "未找到端点")
	ErrAPIKeyNotFound     = New(ErrCodeAPIKeyNotFound, "未找到 API 密钥")
	ErrRequestFailed      = New(ErrCodeRequestFailed, "请求失败")
	ErrStreamError        = New(ErrCodeStreamError, "流处理错误")
	ErrConfigInvalid      = New(ErrCodeConfigInvalid, "配置无效")
	ErrRateLimitExceeded  = New(ErrCodeRateLimitExceeded, "超出速率限制")
	ErrCircuitBreakerOpen = New(ErrCodeCircuitBreakerOpen, "熔断器已开启")
	ErrEmptyResponse      = New(ErrCodeEmptyResponse, "响应为空")
)

预定义的常用错误

View Source
var As = errors.As

As 是标准库 errors.As 的别名,用于错误类型断言

RetryableErrorCodes 定义可重试的错误码集合

Functions

func GetContext

func GetContext(err error) map[string]interface{}

GetContext 获取错误上下文

func GetHTTPStatus

func GetHTTPStatus(err error) int

GetHTTPStatus 获取 HTTP 状态码

func GetMessage

func GetMessage(err error) string

GetMessage 获取错误消息

func HasHTTPStatus

func HasHTTPStatus(err error) bool

HasHTTPStatus 检查是否设置了 HTTP 状态码

func IsCode

func IsCode(err error, code ErrorCode) bool

IsCode 检查错误是否为特定错误码

func IsRetryable added in v0.5.0

func IsRetryable(err error) bool

IsRetryable 检查错误是否可重试 策略: - 如果错误来源于供应商或上游 (具有 error_from 字段),全都允许重试 - 如果来源于网关自身 (不存在 error_from 字段),按照可重试的白名单进行返回

Types

type Error

type Error struct {
	Code       ErrorCode              // 错误码
	HTTPStatus *int                   // HTTP 状态码
	Message    string                 // 错误消息
	Cause      error                  // 原始错误
	Context    map[string]interface{} // 上下文信息
}

Error 结构化错误类型

func New

func New(code ErrorCode, message string) *Error

New 创建新的错误

func NewWithHTTPStatus

func NewWithHTTPStatus(code ErrorCode, message string, status int) *Error

NewWithHTTPStatus 创建新的带 HTTP 状态码的错误

func Wrap

func Wrap(code ErrorCode, message string, cause error) *Error

Wrap 包装已有错误

func WrapWithContext

func WrapWithContext(code ErrorCode, message string, cause error, context map[string]interface{}) *Error

WrapWithContext 包装错误并添加上下文

func WrapWithHTTPStatus

func WrapWithHTTPStatus(code ErrorCode, message string, cause error, status int) *Error

WrapWithHTTPStatus 包装已有错误并设置 HTTP 状态码

func WrapWithHTTPStatusAndContext

func WrapWithHTTPStatusAndContext(code ErrorCode, message string, cause error, status int, context map[string]interface{}) *Error

WrapWithHTTPStatusAndContext 包装错误并添加 HTTP 状态码和上下文

func (*Error) Error

func (e *Error) Error() string

Error 实现 error 接口

func (*Error) Is

func (e *Error) Is(target error) bool

Is 支持错误比较

func (*Error) Unwrap

func (e *Error) Unwrap() error

Unwrap 支持错误链

func (*Error) WithCause added in v0.5.3

func (e *Error) WithCause(cause error) *Error

WithCause 设置原始错误

func (*Error) WithContext

func (e *Error) WithContext(key string, value interface{}) *Error

WithContext 添加上下文信息

func (*Error) WithHTTPStatus

func (e *Error) WithHTTPStatus(status int) *Error

WithHTTPStatus 设置 HTTP 状态码

type ErrorCode

type ErrorCode string

ErrorCode 定义错误码类型

const (

	// 未知错误
	ErrCodeUnknown ErrorCode = "UNKNOWN"
	// 内部错误
	ErrCodeInternal ErrorCode = "INTERNAL"
	// 无效参数
	ErrCodeInvalidArgument ErrorCode = "INVALID_ARGUMENT"
	// 资源未找到
	ErrCodeNotFound ErrorCode = "NOT_FOUND"
	// 权限拒绝
	ErrCodePermissionDenied ErrorCode = "PERMISSION_DENIED"
	// 认证失败
	ErrCodeAuthenticationFailed ErrorCode = "AUTHENTICATION_FAILED"
	// 资源耗尽
	ErrCodeResourceExhausted ErrorCode = "RESOURCE_EXHAUSTED"
	// 前置条件失败
	ErrCodeFailedPrecondition ErrorCode = "FAILED_PRECONDITION"
	// 操作中止
	ErrCodeAborted ErrorCode = "ABORTED"
	// 超出范围
	ErrCodeOutOfRange ErrorCode = "OUT_OF_RANGE"
	// 未实现
	ErrCodeUnimplemented ErrorCode = "UNIMPLEMENTED"
	// 服务不可用
	ErrCodeUnavailable ErrorCode = "UNAVAILABLE"
	// 数据丢失
	ErrCodeDataLoss ErrorCode = "DATA_LOSS"
	// 超时
	ErrCodeDeadlineExceeded ErrorCode = "DEADLINE_EXCEEDED"

	// 无健康通道
	ErrCodeNoHealthyChannel ErrorCode = "NO_HEALTHY_CHANNEL"
	// 适配器未找到
	ErrCodeAdapterNotFound ErrorCode = "ADAPTER_NOT_FOUND"
	// 模型未找到
	ErrCodeModelNotFound ErrorCode = "MODEL_NOT_FOUND"
	// 平台未找到
	ErrCodePlatformNotFound ErrorCode = "PLATFORM_NOT_FOUND"
	// 端点未找到
	ErrCodeEndpointNotFound ErrorCode = "ENDPOINT_NOT_FOUND"
	// API 密钥未找到
	ErrCodeAPIKeyNotFound ErrorCode = "API_KEY_NOT_FOUND"
	// 请求失败
	ErrCodeRequestFailed ErrorCode = "REQUEST_FAILED"
	// 流处理错误
	ErrCodeStreamError ErrorCode = "STREAM_ERROR"
	// 配置无效
	ErrCodeConfigInvalid ErrorCode = "CONFIG_INVALID"
	// 超出速率限制
	ErrCodeRateLimitExceeded ErrorCode = "RATE_LIMIT_EXCEEDED"
	// 熔断器开启
	ErrCodeCircuitBreakerOpen ErrorCode = "CIRCUIT_BREAKER_OPEN"
	// 响应为空
	ErrCodeEmptyResponse ErrorCode = "EMPTY_RESPONSE"
)

预定义的错误码

func GetCode

func GetCode(err error) ErrorCode

GetCode 获取错误码

type ErrorLevel added in v0.5.0

type ErrorLevel int

ErrorLevel 定义错误层级类型

const (
	// ErrorLevelPlatform 平台层级错误
	ErrorLevelPlatform ErrorLevel = iota
	// ErrorLevelKey 密钥层级错误
	ErrorLevelKey
	// ErrorLevelModel 模型层级错误
	ErrorLevelModel
)

func GetErrorLevel added in v0.5.0

func GetErrorLevel(err error) ErrorLevel

GetErrorLevel 根据错误获取错误层级

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL