0
点赞
收藏
分享

微信扫一扫

【Golang】 在 Gin 框架中添加网关中间件

心如止水_c736 2024-05-14 阅读 10

在 Gin 框架中添加网关中间件是一种常见的做法,可以用于实现请求的预处理、身份验证、日志记录等功能。下面是一个简单的示例,演示如何在 Gin 框架中添加一个简单的网关中间件。

package main

import (
	"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 框架会自动调用注册的路由处理函数,并经过添加的中间件处理。

举报

相关推荐

0 条评论