Echo 无法在 HTTPErrorHandler 中使用自定义上下文

Echo can't use custom context in HTTPErrorHandler

e.Use(func(h echo.HandlerFunc) echo.HandlerFunc {
  return func(c echo.Context) error {
    cc := c.(*CustomContext)
    return h(cc)
  }
})


e.HTTPErrorHandler = func(err error, c echo.Context) {
  cc := c.(*CustomContext)
}

我设置了自定义 HTTPErrorHandler 和 CustomContext。

我想在 HTTPErrorHandler 中使用 CustomContext。

c.Error(echo.NewHTTPError(http.StatusUnauthorized, "error"))

工作正常。

但是,当访问未注册页面时出现恐慌 echo.Context is *echo.context, not *CustomContext 错误。

为什么访问找不到页面时出现紧急错误?

恐慌的直接原因是正在使用 "standard" 上下文调用错误处理程序。为了使您的类型断言安全,请使用双值形式:

e.HTTPErrorHandler = func(err error, c echo.Context) {
    cc, ok := c.(*CustomContext)
    if ok {
        // A CustomContext was received
    } else {
        // Something else, probably a standard context, was received
    }
}

但更一般地说,您正在做的事情(使用自定义上下文类型)可能不是一个好主意。如果您解释了您要实现的目标,可能会有更好、更可靠的方法来解决它。

一个明显的替代方案是使用标准的 Go 上下文,通过 c.Request().Context().

的 echo 公开