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
发出信号以增加计数器
我已经更新了答案以避免竞争条件。如评论中所述使用原子。
我有一台使用大猩猩多路复用器的服务器。现在我有两个这样的处理程序:
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
发出信号以增加计数器
我已经更新了答案以避免竞争条件。如评论中所述使用原子。