在ListenAndServe

时间:2018-12-21 17:38:07

标签: go

我想在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有(字符串,http.Handler,http.Handler)   (string,http.Handler)pkg / server / server.go:30:113:undefined:r

问题:

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

1 个答案:

答案 0 :(得分:1)

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的状态代码。我会说现在带一个图书馆。