我試圖在每個 Web 請求之前執(zhí)行一個函數(shù)。我有一個簡單的Web服務(wù)器: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貢獻(xiàn)1744條經(jīng)驗 獲得超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 關(guān)注
- 220 瀏覽
添加回答
舉報
0/150
提交
取消