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

时间:2015-07-01 17:44:13

标签: go stack-trace embedding

我试图使用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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

为什么不用inner-errorstack-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(),因为您依赖于嵌入式错误。