Golang Echo не может использовать пользовательский контекст в HTTPErrorHandler - PullRequest
0 голосов
/ 21 мая 2018
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.

Я хочу использовать CustomContext в HTTPErrorHandler.

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

работает хорошо.

, но паника echo.Context is *echo.context, not *CustomContext ошибка при доступе к незарегистрированной странице.

Почему возникла паническая ошибка при доступе к не найденной странице?

1 Ответ

0 голосов
/ 21 мая 2018

Непосредственной причиной паники является то, что обработчик ошибок вызывается в «стандартном» контексте.Чтобы сделать ваше утверждение типа безопасным, используйте форму с двумя значениями:

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, предоставляемых через echo через c.Request().Context().

...