服务器的Golang自定义处理程序

时间:2017-03-31 22:54:34

标签: http go

我想在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添加自定义方法?

1 个答案:

答案 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

在此处详细了解https://golang.org/pkg/net/http/#Handler