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
错误。
为什么在未找到访问页面时发生了恐慌错误?
答案 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()
的回声公开。