【问题标题】:Create custom error with stack trace使用堆栈跟踪创建自定义错误
【发布时间】:2015-07-01 17:44:13
【问题描述】:

我正在尝试使用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

有什么建议吗?

【问题讨论】:

    标签: go stack-trace embedding


    【解决方案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(),因为您将依赖嵌入的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-19
      • 2016-05-29
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2013-12-07
      相关资源
      最近更新 更多