为了账号安全,请及时绑定邮箱和手机立即绑定

在 ListenAndServe 中调用多个句柄

在 ListenAndServe 中调用多个句柄

Go
PIPIONE 2023-05-22 15:52:08
我想在包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需要检查 的状态代码。我会说在这一点上带一个图书馆。


查看完整回答
反对 回复 2023-05-22
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信