在 Gin 框架中添加网关中间件是一种常见的做法,可以用于实现请求的预处理、身份验证、日志记录等功能。下面是一个简单的示例,演示如何在 Gin 框架中添加一个简单的网关中间件。
package mainimport ("fmt""net/http""time""github.com/gin-gonic/gin"
)// 网关中间件
func GatewayMiddleware() gin.HandlerFunc {return func(c *gin.Context) {// 在这里可以进行各种预处理操作,比如身份验证、日志记录等// 记录请求开始时间start := time.Now()// 执行下一个中间件或者处理器c.Next()// 记录请求结束时间end := time.Now()latency := end.Sub(start)// 打印请求信息fmt.Printf("[%s] %s %s %s %d %v\n",end.Format("2006-01-02 15:04:05"),c.Request.Method,c.Request.URL.Path,c.ClientIP(),c.Writer.Status(),latency,)}
}func main() {// 创建一个 Gin 引擎r := gin.Default()// 添加网关中间件r.Use(GatewayMiddleware())// 定义一个简单的路由r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong"})})// 启动服务if err := r.Run(":8080"); err != nil {fmt.Println("Server startup failed:", err)}
}
在上面的示例中,我们首先定义了一个 GatewayMiddleware
函数,它返回一个 gin.HandlerFunc
类型的函数,这个函数就是我们的网关中间件。在这个中间件中,我们可以进行一些预处理操作,比如记录请求开始时间、身份验证等。然后,我们通过 r.Use()
方法将这个中间件添加到 Gin 引擎中。
接着,我们定义了一个简单的路由 /ping
,当客户端发送 GET 请求到 /ping
路径时,会返回一个 JSON 格式的响应。在这个路由处理函数中,我们并没有进行任何额外的操作,但是由于我们已经在引擎中添加了网关中间件,所以这个请求也会经过网关中间件的处理。
最后,我们通过 r.Run(":8080")
启动了一个 HTTP 服务,监听在 8080 端口上。当有请求到达时,Gin 框架会自动调用注册的路由处理函数,并经过添加的中间件处理。