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/

相关文章:

c++ - Boost 堆栈跟踪不显示函数名称和行号

ios - 你知道这个堆栈跟踪意味着什么吗?

performance - 加载多个嵌入式Youtube视频时,页面加载性能更好吗?

java - 使用 maven 依赖项从 maven 嵌入运行 Liberty 服务器

c++ - C/C++ 中的 Cython

postgresql - 如何保存结构体数组

Golang Web Crawler解决方案,2个数据竞争,退出状态66

go - 为什么 Repeated Go Windows 构建会导致不同的校验和?

json - 使用 "embedded"键将 JSON 解码为结构

Java:如何理解神秘的堆栈跟踪?