1 回答

TA貢獻1998條經驗 獲得超6個贊
next是“處理程序鏈”中的下一個處理程序。
當您執(zhí)行以下操作時:
mux.Use(middleware.Recoverer)
mux.Use(WriteToConsole)
mux.Get("/", handlers.Repo.Home)
mux.Get("/about", handlers.Repo.About)
您實際上是在注冊兩個“處理程序鏈”:
mux.Get("/", middleware.Recoverer(WriteToConsole(handlers.Repo.Home)))
mux.Get("/about", middleware.Recoverer(WriteToConsole(handlers.Repo.About)))
中間件函數(shù)返回的每個處理程序都必須調用提供給它的處理程序,即 do ,如果它不調用,則鏈被破壞,該鏈中的其余處理程序將被忽略。nextnext.ServeHTTP(w, r)next
一個簡化的代碼示例可以更好地說明鏈接:
type handler func()
// your handler
func f() { fmt.Println("f") }
// one middleware
func g(next handler) handler {
return func() {
fmt.Print("g.")
next()
}
}
// another middleware
func h(next handler) handler {
return func() {
fmt.Print("h.")
next()
}
}
通過上述操作,您可以執(zhí)行以下操作:
func main() {
h1 := h(g(f))
h1()
h2 := g(h(f))
h2()
// And you can chain as many of these as you like
// and in any order you like.
h3 := h(g(h(h(h(g(g(h(f))))))))
h3()
}
https://play.golang.org/p/4NXquYsaljr
- 1 回答
- 0 關注
- 184 瀏覽
添加回答
舉報