我试图使用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
有什么建议吗?
答案 0 :(得分:1)
为什么不用inner-error
或stack-trace
之类的内容命名此内部错误?
type HttpError struct {
status int
StackTace *errors.Error
}
在.NET和Java等其他语言/框架中用于错误处理的类中似乎是相当常见的做法。
另一种选择是在创建错误时使用fmt.Sprintf
将自定义消息与内部错误连接起来,将其全部保存为一个错误。
errors.New(fmt.Sprintf("This proprietary error happened! Stack trace: %s", message))
;
如果您这样做,则不会实现func (h *HttpError) Error()
,因为您依赖于嵌入式错误。