Gorilla mux,计算所有传入请求

Gorilla mux, count all incoming requets

我有一台使用大猩猩多路复用器的服务器。现在我有两个这样的处理程序:

api.HandleFunc("/foo", logHandler(mypackage.fooHandler)).Methods("GET")
api.HandleFunc("/bar", logHandler(mypackage.barHandler)).Methods("GET")

现在我想创建一个对请求进行计数的通用方法 (logHandler)。现在我有这样的东西:

func logHandler(fn http.HandlerFunc) http.HandlerFunc {
  return func(w http.ResponseWriter, r *http.Request) {
    // what to do here???
  }
}

我可以从 logHandler 函数中的请求 (r) 中获取所有必要的信息,但是我需要什么 return?我如何让它工作?

这应该有效。

var count = 0
func logHandler(fn http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        atomic.AddInt32(&count, 1)
        log.Println(count)
        fn(w, r)
    }
}

请注意,我不确定 count 变量是否线程安全。如果不是,您可能想使用 channels 发出信号以增加计数器

我已经更新了答案以避免竞争条件。如评论中所述使用原子。