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?
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()
.