我在Go中使用justinas/alice中间件,我想将参数传递给中间件中使用的函数。
例如:
middlewareChain := alice.New(Func1(foo string,foo2 string))
我该怎么做?
答案 0 :(得分:1)
正如Motakjuq
所提到的,你不能直接编写一个中间件,它将选项作为参数,因为它们必须是签名func (http.Handler) http.Handler
。
您可以做的是创建一个生成中间件功能的函数。
func middlewareGenerator(foo, foo2 string) (mw func(http.Handler) http.Handler) {
mw = func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Use foo1 & foo2
h.ServeHTTP(w, r)
})
}
return
}
然后你可以做以下
middlewareChain := alice.New(middlewareGenerator("foo","foo2"))
答案 1 :(得分:1)
也许我没有理解你的问题,如果t0
中的参数在每个请求中发生变化,你就无法将参数传递给函数。如果你的函数在用alice注册时需要一些参数,你可以返回所需的函数,例如:
word
如果你想使用它
Func1