func middleware(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Println("Executing middleware before request phase!")
// Pass control back to the handler
//handler.ServeHTTP(w, r)
fmt.Println("Executing middleware after response phase!")
})
}
看到上面的代码有一个疑问
HandlerFunc 函数接收两个参数调,上面的代码调用HandlerFunc 函数传递的是一个匿名函数。HandlerFunc 函数声明源码如下: type HandlerFunc func(ResponseWriter, *Request)
有疑问加站长微信联系(非本文作者)

这里并不是函数调用,而是类型转换。
type HandlerFunc func(ResponseWriter, *Request)
表明 HandlerFunc 是一个类型。这里的匿名函数符合这个类型,转强制类型转换。
而 HandlerFunc 实现了 http.Handler 接口,所以,可以直接返回该类型。
楼上说的是对的。你可以转换一下思维,比如把 http.HandlerFunc 看成 int,把 func(w ,r) 看成一个变量 a,实际上这就是个强制类型转换。