http - 绕过 golang http 处理程序

标签 http go

假设我有这样的代码

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.HandleFunchttp.Handle 函数将使用 http.DefaultServerMux 实现相同的结果,在这种情况下你会将处理程序参数留给 ListenAndServe 作为 nil

关于http - 绕过 golang http 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42559073/

相关文章:

windows - 隐藏端口并将http加密为https

javascript - angularjs $httpProvider 拦截器文档

http - 如何防止 IIS7 删除我的 cookie?

logging - GoLang 数据记录器(带宽)内存泄漏

json - 可以在不使用结构的情况下在 Golang 的 DynamoDB 中运行 PutItem 吗?

node.js - 如何在 Go 或 node.js 中接受没有 http 版本和主机 header 的 http 请求?

http - 如何将https更改为http

带有 HTTP 状态代码的 Perl CGI

go - 通过 GoCQL 在 ScyllaDB 上进行阻塞/一致/可预测的回复/请求

go - 为什么 `defer recover()` 没有捕捉到 panic ?