doucai6663 2018-05-21 15:40
浏览 235
已采纳

Golang Echo无法在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)
}

I set custom HTTPErrorHandler and CustomContext.

I want to use CustomContext in HTTPErrorHandler.

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

is work well.

but, panic echo.Context is *echo.context, not *CustomContext error when access not registered page.

Why occurred panic error when access not found page?

  • 写回答

1条回答 默认 最新

  • duandu9260 2018-05-21 15:53
    关注

    The immediate cause of the panic is that the error handler is being called with a "standard" context. To make your type assertion safe, use the two-value form:

    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
        }
    }
    

    But more generally speaking, what you're doing (using a custom context type) is probably a bad idea. If you explain what you're trying to accomplish, there is probably a better, more robust way to solve it.

    One obvious alternative would be to use standard Go contexts, as exposed through echo via c.Request().Context().

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程