我想在包ListenAndServe的方法中使用多个处理程序http。例如: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: 调用 http.ListenAndServe 的参数太多 (string, http.Handler, http.Handler) want (string, http.Handler) pkg/server/server.go:30 :113: 未定义: r问题:现在它不接受超过 2 个参数,那么还有其他选择吗?
1 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
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需要检查 的状态代码。我会说在这一点上带一个图书馆。
- 1 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消