尝试使用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.RecoveryOption
s 并返回 a func(http.Handler) http.Handler
。它返回的 func 是我们真正想要环绕我们的路由器的。我们可以写成
recoveryHandler := handlers.RecoveryHandler() http.ListenAndServe(":1123", recoveryHandler(r))
或者您可以在一行中完成所有操作
http.ListenAndServe(":1123", handlers.RecoveryHandler()(r))
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消