1

我有这个现有的库调用:

func Policy(quota *Quota, options ...*Options) func(resp http.ResponseWriter, req *http.Request) {
    o := newOptions(options)
    if o.Disabled {
        return func(resp http.ResponseWriter, req *http.Request) {}
    }
   /// ...
}

我们曾经使用 Martini,但由于 Martini 不再维护,我们正在更新到 Mux。旧的 Martini 路由器这样称呼它:

m := &martini.ClassicMartini{bm, r}

m.Use(throttle.Policy(&throttle.Quota{
    Limit:  10000,
    Within: 24 * time.Hour,
}))

但我需要为 mux 中间件更新它,如下所示:

r := mux.NewRouter()
r.Use(func(h http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        fun := throttle.Policy(&throttle.Quota{
            Limit:  10000,
            Within: 24 * time.Hour,
        })
        fun(w,r)
        h.ServeHTTP(w,r);
    })
});

上面的“似乎是正确的”,但我真的不确定。如果能够检查 的返回值,fun()看看我是否应该继续调用剩余的中间件,那就太好了。这是一个我不知道如何用 golang 解决的缺陷。

4

0 回答 0