我想在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个参数,那么还有其他选择吗?
答案 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
的状态代码。我会说现在带一个图书馆。