1 回答
TA贡献1998条经验 获得超6个赞
next是“处理程序链”中的下一个处理程序。
当您执行以下操作时:
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)))
中间件函数返回的每个处理程序都必须调用提供给它的处理程序,即 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()
}
}
通过上述操作,您可以执行以下操作:
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 关注
- 263 浏览
添加回答
举报
