绕过golang http处理程序

时间:2017-03-02 15:12:18

标签: http go

我们说我有这样的代码

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,这可能吗?

2 个答案:

答案 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.HandleFunchttp.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)
相关问题