我试图在每个 Web 请求之前执行一个函数。我有一个简单的Web服务器:func h1(w http.ResponseWriter, r *http.Request) { fmt.Pprintf("handler: %s\n", "h1")}func h2(w http.ResponseWriter, r *http.Request) { fmt.Pprintf("handler: %s\n", "h2")} func h3(w http.ResponseWriter, r *http.Request) { fmt.Pprintf("handler: %s\n", "h3")} func main() { http.HandleFunc("/", h1) http.HandleFunc("/foo", h2) http.HandleFunc("/bar", h3) /* Register a function which is executed before the handlers, no matter what URL is called. */ http.ListenAndServe(":8080", nil)}问题:有没有简单的方法可以做到这一点?
1 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
包装每个HandlerFuncs。
func WrapHandler(f HandlerFunc) HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// call any pre handler functions here
mySpecialFunc()
f(w, r)
}
}
http.HandleFunc("/", WrapHandler(h1))
由于Function是Go中的一等值,因此可以轻松地包装,咖喱它们或其他您可能要使用它们做的事情。
- 1 回答
- 0 关注
- 201 浏览
添加回答
举报
0/150
提交
取消