gpt4 book ai didi

go - 在 ListenAndServe 中调用多个句柄

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:36 30 4
gpt4 key购买 nike

我想在 http 包的 ListenAndServe 方法中使用多个处理程序。例如:

if err := http.ListenAndServe(":"+s.config.Port,
handlers.LoggingHandler(os.Stdout, s.router),
handlers.CORS()(r.router)
); err != nil {

问题:

每次我收到以下错误:

pkg/server/server.go:30:31: too many arguments in call to http.ListenAndServe have (string, http.Handler, http.Handler) want (string, http.Handler) pkg/server/server.go:30:113: undefined: r

问题:

现在它不接受超过 2 个参数,那么除了这样做还有其他选择吗?

最佳答案

ListenAndServe 只需要一个http.Handler

在不引入库的情况下执行此操作的最简单方法是构建一个包含以下两者的 http.Handler:

func simpleChain(hs ...http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
for _, h := range hs {
h.ServeHTTP(w, r)
}
})
}

如果任何处理程序想要对 Request.Body 执行某些操作或写入 ResponseWriter,这会产生一些问题。

例如,您可能希望处理程序检查请求是否具有权限,然后防止调用其他处理程序。这意味着需要检查 ResponseWriter 的状态代码。我会说在这一点上引入图书馆。

关于go - 在 ListenAndServe 中调用多个句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53888813/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com