📅  最后修改于: 2023-12-03 14:41:24.822000             🧑  作者: Mango
Gin 是一款轻量级的 Go Web 框架,它支持中间件。中间件是一种常见的设计模式,它负责在请求到达目标处理程序之前进行处理,可以用来实现各种功能,例如:
Gin 的中间件使用非常灵活,可以对应用的全局、路由组、单个路由进行设置。
以下是一个简单的 Gin 中间件示例,该示例在请求处理前输出一条日志,请求处理后输出一个 HTTP 响应头:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"time"
)
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
t := time.Now()
// 在请求处理前输出日志
fmt.Printf("Started %s %s\n", c.Request.Method, c.Request.URL.Path)
// 继续处理请求
c.Next()
// 在请求处理后输出响应头
fmt.Printf("Completed %s %s in %v\n", c.Request.Method, c.Request.URL.Path, time.Since(t))
}
}
func main() {
// 创建一个默认的 Gin 引擎
r := gin.Default()
// 绑定中间件到路由组 /api
api := r.Group("/api")
api.Use(Logger())
// GET 请求 /api/hello
api.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello, World!",
})
})
// 启动引擎
r.Run(":8080")
}
以上代码定义一个名为 Logger
的中间件函数,该函数返回一个符合 Gin 框架要求的中间件函数。
在 main
函数中,先创建一个默认的 Gin 引擎 r
,然后创建一个路由组 /api
,并将中间件 Logger
绑定到该路由组。
接着,定义一个 GET 请求处理函数,在该函数中返回一个 JSON 响应。
最后,调用引擎的 Run
方法启动 HTTP 服务,监听端口 :8080
。
运行以上程序,访问 http://localhost:8080/api/hello
,控制台输出如下:
Started GET /api/hello
Completed GET /api/hello in 5.364µs
以上输出显示,在请求处理前输出了一条日志(Started GET /api/hello),请求处理后输出了一个表示处理时间的信息(Completed GET /api/hello in 5.364µs)。
总结:通过使用 Gin 中间件,我们可以轻松地实现各种功能,提高应用的灵活性和可维护性。需注意,中间件的执行顺序影响应用的行为,应慎重设置。