1
0
Files
nex/backend/internal/conversion/errors.go
lanyuanxiaoyao 4c6b49099d feat: 配置 golangci-lint 静态分析并修复存量违规
- 新增 backend/.golangci.yml 配置 12 个 linter(forbidigo、errorlint、errcheck、staticcheck、revive、gocritic、gosec、bodyclose、noctx、nilerr、goimports、gocyclo)
- 新增 lefthook.yml 配置 pre-commit hook 自动运行 lint
- 修复存量代码违规:errors.Is/As 替换、zap.Error 替换、import 排序、errcheck 修复
- 更新 README 补充编码规范说明
- 归档 backend-code-lint 变更
2026-04-24 13:01:48 +08:00

84 lines
2.3 KiB
Go

package conversion
import "fmt"
// ErrorCode 错误码枚举
type ErrorCode string
const (
ErrorCodeInvalidInput ErrorCode = "INVALID_INPUT"
ErrorCodeMissingRequiredField ErrorCode = "MISSING_REQUIRED_FIELD"
ErrorCodeIncompatibleFeature ErrorCode = "INCOMPATIBLE_FEATURE"
ErrorCodeFieldMappingFailure ErrorCode = "FIELD_MAPPING_FAILURE"
ErrorCodeToolCallParseError ErrorCode = "TOOL_CALL_PARSE_ERROR"
ErrorCodeJSONParseError ErrorCode = "JSON_PARSE_ERROR"
ErrorCodeStreamStateError ErrorCode = "STREAM_STATE_ERROR"
ErrorCodeUTF8DecodeError ErrorCode = "UTF8_DECODE_ERROR"
ErrorCodeProtocolConstraint ErrorCode = "PROTOCOL_CONSTRAINT_VIOLATION"
ErrorCodeEncodingFailure ErrorCode = "ENCODING_FAILURE"
ErrorCodeInterfaceNotSupported ErrorCode = "INTERFACE_NOT_SUPPORTED"
)
// ConversionError 协议转换错误
type ConversionError struct {
Code ErrorCode
Message string
ClientProtocol string
ProviderProtocol string
InterfaceType string
Details map[string]any
Cause error
}
// NewConversionError 创建转换错误
func NewConversionError(code ErrorCode, message string) *ConversionError {
return &ConversionError{
Code: code,
Message: message,
Details: make(map[string]any),
}
}
// WithClientProtocol 设置客户端协议
func (e *ConversionError) WithClientProtocol(protocol string) *ConversionError {
e.ClientProtocol = protocol
return e
}
// WithProviderProtocol 设置服务端协议
func (e *ConversionError) WithProviderProtocol(protocol string) *ConversionError {
e.ProviderProtocol = protocol
return e
}
// WithInterfaceType 设置接口类型
func (e *ConversionError) WithInterfaceType(ifaceType string) *ConversionError {
e.InterfaceType = ifaceType
return e
}
// WithDetail 添加详情
func (e *ConversionError) WithDetail(key string, value any) *ConversionError {
e.Details[key] = value
return e
}
// WithCause 设置原因
func (e *ConversionError) WithCause(cause error) *ConversionError {
e.Cause = cause
return e
}
// Error 实现 error 接口
func (e *ConversionError) Error() string {
if e.Cause != nil {
return fmt.Sprintf("[%s] %s: %v", e.Code, e.Message, e.Cause)
}
return fmt.Sprintf("[%s] %s", e.Code, e.Message)
}
// Unwrap 支持 errors.Is/As
func (e *ConversionError) Unwrap() error {
return e.Cause
}