使用堆栈跟踪创建自定义错误
Create custom error with stack trace
我正在尝试使用 go-errors 来包含带有我生成的错误的堆栈跟踪。我有一个自定义 HttpError
类型,我还想包含堆栈跟踪。我最初的想法是通过嵌入来做到这一点,但我似乎无法嵌入它,因为 class (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
}
在 类 中似乎是相当普遍的做法,用于其他 languages/frameworks 中的错误处理,例如 .NET 和 Java。
另一种选择是在您创建错误时使用 fmt.Sprintf
将您的自定义消息与内部错误连接起来,将它们保持为一个。
errors.New(fmt.Sprintf("This proprietary error happened! Stack trace: %s", message))
;
如果你这样做,你就不会实现 func (h *HttpError) Error()
,因为你会依赖于嵌入的错误。
我正在尝试使用 go-errors 来包含带有我生成的错误的堆栈跟踪。我有一个自定义 HttpError
类型,我还想包含堆栈跟踪。我最初的想法是通过嵌入来做到这一点,但我似乎无法嵌入它,因为 class (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
}
在 类 中似乎是相当普遍的做法,用于其他 languages/frameworks 中的错误处理,例如 .NET 和 Java。
另一种选择是在您创建错误时使用 fmt.Sprintf
将您的自定义消息与内部错误连接起来,将它们保持为一个。
errors.New(fmt.Sprintf("This proprietary error happened! Stack trace: %s", message))
;
如果你这样做,你就不会实现 func (h *HttpError) Error()
,因为你会依赖于嵌入的错误。