Gin框架使用通用http.Handler中間件
GinGolangshareSHARE
Share to WeiboShare to TwitterShare to FacebookShare to Google+Gin是一个Go语言编写的Web框架。Gin有着一系列自己专用的中间件(middleware),通过Use()
方法即可调用。那如果想要使用那些采用net/http
包里标准接口的中间件该怎么办呢? 以下是在Gin框架中调用常见中间件类型的方法:
http.HandlerFunc
的中间件
对于参数为http.HandlerFunc
的中间件,Gin框架有内置的WrapF
方法可以把原函数转换为gin.HandlerFunc
函数。举个例子,有一个该类型的中间件,可以为所有的HTTP请求添加键为X-Author
、值为Makazeu
的Header:
router.Use(gin.WrapF(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Author", "Makazeu")
}))
参数为func(h http.Handler) http.Handler
的中间件
还有一些中间件,它们的定位是中间件链中的一环,参数是一个(参数为http.Handler
、返回值也为http.Handler
的函数)。以《纽约时报》的提供gzip压缩支持的中间件gziphandler为例,其中间件函数如下:
func GzipHandler(h http.Handler) http.Handler {
wrapper, _ := NewGzipLevelHandler(gzip.DefaultCompression)
return wrapper(h)
}
对于这类中间件,我们需要先将其包装一层,可以直接使用gin-wraphh这个库,完整代码如下:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
"github.com/turtlemonvh/gin-wraphh"
"github.com/NYTimes/gziphandler"
)
func main() {
router := gin.Default()
gzipMiddleware, _ := gziphandler.GzipHandlerWithOpts(gziphandler.MinSize(1))
router.Use(wraphh.WrapHH(gzipMiddleware))
router.GET("/", func(ctx *gin.Context) {
ctx.String(http.StatusOK, "Hello World!")
})
router.Run(":8088")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)