如何通过应返回Handler的函数返回HandlerFunc?

时间:2019-07-14 08:57:10

标签: go

在链接处理程序时,该函数具有Handler的返回类型,但实际上返回了HandlerFunc。这不会引发任何错误。

如何接受HandlerFunc代替Handler(前者是函数类型,后者是接口类型)?

func log(h http.Handler) http.Handler {
  return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    ...
  })
}

2 个答案:

答案 0 :(得分:2)

  

HandlerFunc类型是允许使用普通适配器的适配器   用作HTTP处理程序。如果f是具有适当条件的函数   签名,HandlerFunc(f)是调用f的处理程序。

http.Handler是一个接口:

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

http.HandlerFunc是一种类型:

type HandlerFunc func(ResponseWriter, *Request)

// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
    f(w, r)
}

答案 1 :(得分:1)

http.Handler是一个界面。 http.HandlerFunc是实现该接口的具体类型。这些全部记录在http package documentation中。如果您不熟悉界面,请从A Tour of Go开始。