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

时间:2018-05-21 15:40:17

标签: go go-echo

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错误。

为什么在未找到访问页面时发生了恐慌错误?

1 个答案:

答案 0 :(得分:1)

恐慌的直接原因是错误处理程序正在使用"标准"上下文。要使类型断言安全,请使用双值格式:

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()的回声公开。