Как преобразовать старое удовольствие от промежуточного ПО c в новое функционирование промежуточного ПО - PullRequest
1 голос
/ 27 марта 2020

У меня есть этот существующий библиотечный вызов:

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, но выполняем обновление до Mux, поскольку Martini больше не поддерживается. Старый маршрутизатор Martini называл это так:

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

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

, но мне нужно обновить его для промежуточного программного обеспечения мультиплексора, например так:

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.

...