Negroni 和 Gorilla 上下文 ClearHandler

Negroni and Gorilla Context ClearHandler

是否可以使用 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)

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

Negroni.Use() expects a parameter of type negroni.Handler but Gorilla's context.ClearHandler() returns a value of type http.Handler.

好消息是有一个替代的 Negroni.UseHandler() 方法需要一个 http.Handler 所以就用它吧。请注意 context.ClearHandler() 还需要另一个 http.Handler:

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

备注:

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