69 lines
1.5 KiB
Go
69 lines
1.5 KiB
Go
// Package errors 提供错误处理框架
|
|
package errors
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// Error 表示构建过程中的错误
|
|
type Error interface {
|
|
error
|
|
// Code 返回错误代码
|
|
Code() string
|
|
// Component 返回发生错误的组件
|
|
Component() string
|
|
// Details 返回详细错误信息
|
|
Details() map[string]interface{}
|
|
}
|
|
|
|
// BuildError 实现了Error接口
|
|
type BuildError struct {
|
|
code string
|
|
component string
|
|
message string
|
|
details map[string]interface{}
|
|
cause error
|
|
}
|
|
|
|
// NewBuildError 创建一个新的BuildError
|
|
func NewBuildError(code, component, message string, cause error, details map[string]interface{}) *BuildError {
|
|
if details == nil {
|
|
details = make(map[string]interface{})
|
|
}
|
|
return &BuildError{
|
|
code: code,
|
|
component: component,
|
|
message: message,
|
|
details: details,
|
|
cause: cause,
|
|
}
|
|
}
|
|
|
|
// Error 实现error接口
|
|
func (e *BuildError) Error() string {
|
|
if e.cause != nil {
|
|
return fmt.Sprintf("[%s] %s: %s (caused by: %v)", e.code, e.component, e.message, e.cause)
|
|
}
|
|
return fmt.Sprintf("[%s] %s: %s", e.code, e.component, e.message)
|
|
}
|
|
|
|
// Code 返回错误代码
|
|
func (e *BuildError) Code() string {
|
|
return e.code
|
|
}
|
|
|
|
// Component 返回发生错误的组件
|
|
func (e *BuildError) Component() string {
|
|
return e.component
|
|
}
|
|
|
|
// Details 返回详细错误信息
|
|
func (e *BuildError) Details() map[string]interface{} {
|
|
return e.details
|
|
}
|
|
|
|
// Unwrap 返回底层错误
|
|
func (e *BuildError) Unwrap() error {
|
|
return e.cause
|
|
}
|