Go Gorilla RecoveryHandler 编译错误

尝试使用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.RecoveryOption

src/main.go:48: 不能在赋值中使用 handlers.RecoveryHandler(r)(类型 func(http.Handler) http.Handler)作为类型 *mux.Router

如何使用 Gorilla 的 RecoveryHandler?


紫衣仙女
浏览 133回答 1
1回答

慕丝7291255

似乎文档不正确。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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go