Files
workspace/code/base-project/base-go/pkg/error/error.go
T
2025-08-25 17:22:54 +08:00

43 lines
662 B
Go

package error
import (
"errors"
"runtime/debug"
)
// StackError 保存原始错误和堆栈
type StackError struct {
err error
stack string
}
// 实现 error 接口
func (s *StackError) Error() string {
if s.err == nil {
return ""
}
return s.err.Error()
}
// StackTrace 返回堆栈信息
func (s *StackError) StackTrace() string {
return s.stack
}
// WrapWithStack 给错误附加堆栈,如果已经是 StackError 则直接返回
func WrapWithStack(err error) *StackError {
if err == nil {
return nil
}
var se *StackError
if errors.As(err, &se) {
return se
}
return &StackError{
err: err,
stack: string(debug.Stack()),
}
}