我想在http.ListenAndServe
这就是我所拥有的
http.ListenAndServe(":8000", ErrorHandler)
func ErrorHandler(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
h.ServeHTTP(w, r)
})
}
错误
cannot use ErrorHandler (type func(http.Handler) http.Handler) as type http.Handler in argument to http.ListenAndServe:
func(http.Handler) http.Handler does not implement http.Handler (missing ServeHTTP method)
如何向ListenAndServe
添加自定义方法?
答案 0 :(得分:4)
你的ErrorHandler(h http.Handler) http.Handler
func基本上只是“中间件”而不是真正的处理程序。它需要一个处理程序h
并返回一个新的处理程序。 http.StripPrefix就是这种“中间件”的一个例子。
如果您不想要中间件,只需要一个处理程序,那么您需要稍微改变一下您的功能:
func ErrorHandler(w http.ResponseWriter, r *http.Request) {
// do stuff with r and w
}
现在您可以将ErrorHandler
传递给ListenAndServe
,但仍然需要将其转换为正确的http.Handler
类型,如下所示:
http.ListenAndServe(":8000", http.HandlerFunc(ErrorHandler))
http.HandlerFunc是一个适配器,如果函数具有正确的签名,则将其转换为http.Handler
。
最后,如果你不喜欢这个转换,你需要定义一个类型而不是一个函数,你需要在该类型上定义一个满足{{{}的方法。 1}}接口类型。
http.Handler