Negroni和Gorilla Context ClearHandler

时间:2015-05-28 12:37:58

标签: go gorilla negroni

是否可以使用Gorilla's context.ClearHandler()作为Negroni的中间件,就像我看到它用作Alice的中间件一样?类似的东西:

n.Use(context.ClearHandler())

目前我在每次回复后都打电话给context.Clear(r),但我宁愿整理一下来自动处理。我目前收到以下错误:

cannot use context.ClearHandler() (type http.Handler) as type negroni.Handler in argument to n.Use:                                                                   
http.Handler does not implement negroni.Handler (wrong type for ServeHTTP method)                                                                                                  
  have ServeHTTP(http.ResponseWriter, *http.Request)                                                                                                                         
  want ServeHTTP(http.ResponseWriter, *http.Request, http.HandlerFunc)

但我不确定错误消息告诉我的是什么。

1 个答案:

答案 0 :(得分:4)

Negroni.Use()需要negroni.Handler类型的参数,但Gorilla的context.ClearHandler()会返回http.Handler类型的值。

好的是,有一种替代Negroni.UseHandler()方法需要http.Handler才能使用它。请注意,context.ClearHandler()还需要另一个http.Handler

otherHandler := ... // Other handler you want to clear
n.UseHandler(context.ClearHandler(otherHandler))

注意:

Router包中的gorilla/mux会在请求生命周期结束时自动调用context.Clear(),因此如果您使用它,则无需使用清除上下文context.ClearHandler()。您只需将其用于其他/自定义处理程序(除非您想手动调用context.Clear())。