gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:34:35 25 4
gpt4 key购买 nike

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"))

运行良好。

但是, panic echo.Context is *echo.context, not *CustomContext 当访问未注册页面时出现错误。

为什么访问找不到页面时会出现 panic 错误?

最佳答案

panic 的直接原因是使用“标准”上下文调用错误处理程序。为了使您的类型断言安全,请使用双值形式:

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

关于go - Echo 无法在 HTTPErrorHandler 中使用自定义上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50452235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com