使用堆栈跟踪创建自定义错误

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-errorstack-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(),因为你会依赖于嵌入的错误。