Gin框架使用通用http.Handler中間件

Posted hongmingover

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gin框架使用通用http.Handler中間件相关的知识,希望对你有一定的参考价值。

Gin框架使用通用http.Handler中間件

shareSHARE

Gin是一个Go语言编写的Web框架。Gin有着一系列自己专用的中间件(middleware),通过Use()方法即可调用。那如果想要使用那些采用net/http包里标准接口的中间件该怎么办呢? 以下是在Gin框架中调用常见中间件类型的方法:

参数为http.HandlerFunc的中间件

对于参数为http.HandlerFunc的中间件,Gin框架有内置的WrapF方法可以把原函数转换为gin.HandlerFunc函数。举个例子,有一个该类型的中间件,可以为所有的HTTP请求添加键为X-Author、值为Makazeu的Header:

 
  1. router.Use(gin.WrapF(func(w http.ResponseWriter, r *http.Request)
  2. w.Header().Set("X-Author", "Makazeu")
  3. ))

参数为func(h http.Handler) http.Handler的中间件

还有一些中间件,它们的定位是中间件链中的一环,参数是一个(参数为http.Handler、返回值也为http.Handler的函数)。以《纽约时报》的提供gzip压缩支持的中间件gziphandler为例,其中间件函数如下:

 
  1. func GzipHandler(h http.Handler) http.Handler
  2. wrapper, _ := NewGzipLevelHandler(gzip.DefaultCompression)
  3. return wrapper(h)

对于这类中间件,我们需要先将其包装一层,可以直接使用gin-wraphh这个库,完整代码如下:

 
  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "net/http"
  5. "github.com/turtlemonvh/gin-wraphh"
  6. "github.com/NYTimes/gziphandler"
  7. )
  8. func main()
  9. router := gin.Default()
  10. gzipMiddleware, _ := gziphandler.GzipHandlerWithOpts(gziphandler.MinSize(1))
  11. router.Use(wraphh.WrapHH(gzipMiddleware))
  12. router.GET("/", func(ctx *gin.Context)
  13. ctx.String(http.StatusOK, "Hello World!")
  14. )
  15. router.Run(":8088")

 

以上是关于Gin框架使用通用http.Handler中間件的主要内容,如果未能解决你的问题,请参考以下文章

Gin框架使用通用http.Handler中間件

gin框架实现一个简单的项目 ③

Gin实现依赖注入

Web框架Gin

Gin框架介绍及使用

Gin框架介绍及使用