You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现栈错误追踪?Wrap数据库错误时追踪失效的问题

栈错误追踪实现问题

我正尝试实现栈错误追踪,目前遇到了一个矛盾的问题:

情况一:直接Wrap数据库错误

以下代码能捕获数据库错误,但无法触发追踪:

// err 是 *db.Error 类型
if err != nil {
  return nil, errors.Wrap(err, "error msg")
}

// 错误中间件中的代码:
func traceError(err error) {
    _, ok := err.(stackTracer)
    if ok {
        fmt.Print("tracer implemented")
    } else {
        fmt.Print("tracer not implemented")
    }
}
switch e := errors.Cause(err).(type) {
  case *db.Error:
    fmt.Print("caught db error")
    traceError(err)
  default:
    fmt.Print("unknown error")
    traceError(err)
}

输出结果:

caught db error
tracer not implemented

情况二:先新建错误再Wrap

当我先创建新错误再执行Wrap时,追踪功能正常触发,但错误会被识别为未知错误:

// err 是 *db.Error 类型
if err != nil {
  newError := errors.New(err.Error())
  return nil, errors.Wrap(newError, "error msg")
}

输出结果:

unknown error
tracer implemented

期望输出

我想要的理想输出是:

caught db error
tracer implemented

补充说明:重新检查后发现代码本身没有问题,问题可能出在代码其他部分的疏漏。

内容的提问来源于stack exchange,提问作者Bhojendra Rauniyar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:22:04