negroni本身是一个中间件,不过它也提供了拓展,以帮助我们更简单地实现自己想要的功能的中间件。那么,我们究竟该如何实现中间件,才能能够封装到negroni中,从而通过negroni来调用呢?可以通过一个简单的例子分析:

package main
import (
"fmt"
"net/http"
"github.com/urfave/negroni"
"github.com/phyber/negroni-gzip/gzip"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "Welcome to the home page!")
})
n := negroni.Classic() //创建一个negroni
n.Use(gzip.Gzip(gzip.DefaultCompression))
n.UseHandler(mux)
n.Run(":3000")
}

我们从negroni创建之后开始分析。n.UseHandler(mux)函数: