如何将参数传递给Go中的alice中间件?

时间:2016-12-05 08:51:35

标签: go middleware

我在Go中使用justinas/alice中间件,我想将参数传递给中间件中使用的函数。

例如:

middlewareChain := alice.New(Func1(foo string,foo2 string))

我该怎么做?

2 个答案:

答案 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