为了账号安全,请及时绑定邮箱和手机立即绑定

Go Gorilla RecoveryHandler 编译错误

Go Gorilla RecoveryHandler 编译错误

Go
紫衣仙女 2021-11-22 18:52:10
尝试使用RecoverHandler,从 Intellij 编译失败。r := mux.NewRouter()r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {    panic("Unexpected error!")})http.ListenAndServe(":1123", handlers.RecoveryHandler(r))我得到以下错误。上面的代码来自 gorilla 文档原样,我确实运行了go get github.com/gorilla/handlers.src/main.go:48: 不能在 handlers.RecoveryHandler 的参数中使用 r(类型 *mux.Router)作为类型 handlers.RecoveryOptionsrc/main.go:48: 不能在赋值中使用 handlers.RecoveryHandler(r)(类型 func(http.Handler) http.Handler)作为类型 *mux.Router如何使用 Gorilla 的 RecoveryHandler?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

似乎文档不正确。handlers.RecoveryHandler不能用作 http 处理程序中间件本身,它返回一个。看着签名

func RecoveryHandler(opts ...RecoveryOption) func(h http.Handler) http.Handler

我们可以看到它需要 0 个或更多handlers.RecoveryOptions 并返回 a func(http.Handler) http.Handler。它返回的 func 是我们真正想要环绕我们的路由器的。我们可以写成

recoveryHandler := handlers.RecoveryHandler()
http.ListenAndServe(":1123", recoveryHandler(r))

或者您可以在一行中完成所有操作

http.ListenAndServe(":1123", handlers.RecoveryHandler()(r))


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信