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

标签 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

有什么建议吗?

最佳答案

为什么不直接用inner-errorstack-trace 等适当的名称来命名这个内部错误?

type HttpError struct {
  status int
  StackTace *errors.Error
}

在 .NET 和 Java 等其他语言/框架中用于错误处理的类中似乎是相当普遍的做法。

另一种选择是在您创建错误时使用 fmt.Sprintf 将您的自定义消息与内部错误连接起来,将它们保持为一个。

errors.New(fmt.Sprintf("这个专有错误发生了!堆栈跟踪:%s", message));

如果你这样做了,你就不会实现 func (h *HttpError) Error(),因为你会依赖于嵌入的错误。

关于go - 使用堆栈跟踪创建自定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31168199/

相关文章:

没有堆栈的 Java "Thread-2"会阻止终止

python - Keras seq2seq - 词嵌入

codeigniter - 如何使用CodeIgniter获得YouTube嵌入代码?

go - 为什么golang类型实现sort.Interface时方法接收者不需要是指针?

java - 确定当前调用堆栈(用于诊断目的)

google-app-engine - 在 golang 上执行 post 请求以获取 uber 身份验证不起作用

Java 显示 StackTrace 中一行的实际 Java 代码行

python - 将Pig嵌入Python

unicode - 使用 Go 删除​​变音符号

go - 将结构映射到go中的函数