假设我有这样的代码
handler := middleware1.New(
middleware2.New(
middleware3.New(
middleware4.New(
NewHandler()
),
),
),
)
http.ListenAndServe(":8080", handler)
处理程序有大量的中间件。
现在我想创建自定义端点,它将跳过所有中间件,因此 serveHTTP()
函数中的任何内容都不会被执行:
http.HandleFunc("/testing", func(
w http.ResponseWriter,
r *http.Request,
) {
fmt.Fprintf(w, "it works!")
return
})
http.ListenAndServe(":8080", handler)
但这不起作用,并且永远不会达到 /testing
。理想情况下,我根本不想修改 handler
,这可能吗?
最佳答案
您可以使用 http.ServeMux
将请求路由到正确的处理程序:
m := http.NewServeMux()
m.HandleFunc("/testing", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "it works!")
return
})
m.Handle("/", handler)
http.ListenAndServe(":8080", m)
使用 http.HandleFunc
和 http.Handle
函数将使用 http.DefaultServerMux
实现相同的结果,在这种情况下你会将处理程序参数留给 ListenAndServe
作为 nil
。
关于http - 绕过 golang http 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42559073/