我们说我有这样的代码
handler := middleware1.New(
middleware2.New(
middleware3.New(
middleware4.New(
NewHandler()
),
),
),
)
http.ListenAndServe(":8080", handler)
其中handler有大量的中间件。
现在我想创建自定义端点,它将跳过所有中间件,因此serveHTTP()
函数中没有任何内容被执行:
http.HandleFunc("/testing", func(
w http.ResponseWriter,
r *http.Request,
) {
fmt.Fprintf(w, "it works!")
return
})
http.ListenAndServe(":8080", handler)
但这不起作用,永远不会达到/testing
。理想情况下,我根本不想修改handler
,这可能吗?
答案 0 :(得分:2)
您可以使用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
{{1} }。
答案 1 :(得分:1)
试试这个,ListenAndServe处理程序通常是零。
http.Handle("/", handler)
http.HandleFunc("/testing", func(
w http.ResponseWriter,
r *http.Request,
) {
fmt.Fprintf(w, "it works!")
return
})
http.ListenAndServe(":8080", nil)