我正在尝试使用 go-errors包括带有我生成的错误的堆栈跟踪。我有一个自定义 HttpError
类型,我还想包含堆栈跟踪。我最初的想法是通过嵌入来做到这一点,但我似乎无法嵌入它,因为类的名称 (Error
) 与其中一个方法的名称相同。
package netutil
import (
"github.com/go-errors/errors"
)
type HttpError struct {
status int
*errors.Error
}
func (h *HttpError) Error() string {
return "Failed"
}
func NewHttpError(status int, message string) *HttpError {
return &HttpError{
status,
errors.New(message),
}
}
我收到以下错误:
tmp_error.go:12: type HttpError has both field and method named Error
有什么建议吗?
最佳答案
为什么不直接用inner-error
或stack-trace
等适当的名称来命名这个内部错误?
type HttpError struct {
status int
StackTace *errors.Error
}
在 .NET 和 Java 等其他语言/框架中用于错误处理的类中似乎是相当普遍的做法。
另一种选择是在您创建错误时使用 fmt.Sprintf
将您的自定义消息与内部错误连接起来,将它们保持为一个。
errors.New(fmt.Sprintf("这个专有错误发生了!堆栈跟踪:%s", message))
;
如果你这样做了,你就不会实现 func (h *HttpError) Error()
,因为你会依赖于嵌入的错误。
关于go - 使用堆栈跟踪创建自定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31168199/