gin入门教程(6):全局中间件,自定义中间件

在 Gin 中,中间件用于处理请求的预处理和后处理,可以实现日志、身份验证、跨域资源共享(CORS)等功能。下面是如何使用和创建中间件的基本步骤:

1. 使用内置中间件

Gin 提供了一些内置中间件,例如:

  • 日志中间件:
go 复制代码
r.Use(gin.Logger())
  • 恢复中间件(处理恐慌并恢复):
go 复制代码
r.Use(gin.Recovery())
2. 自定义中间件

您可以轻松创建自定义中间件,例如简单的身份验证:

go 复制代码
func AuthMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        token := c.GetHeader("Authorization")
        if token != "your_secret_token" {
            c.JSON(401, gin.H{"error": "Unauthorized"})
            c.Abort() // 中止后续处理
            return
        }
        c.Next() // 继续处理请求
    }
}
3. 注册中间件

您可以在路由组中注册中间件,或在全局范围内使用:

  • 全局中间件:
go 复制代码
r.Use(AuthMiddleware())
  • 路由组中间件:
go 复制代码
v1 := r.Group("/v1")
v1.Use(AuthMiddleware())
{
    v1.GET("/users", getUsers)
}
4. 中间件顺序

中间件的执行顺序是根据它们被注册的顺序,先注册的中间件先执行。在调用 c.Next() 后,后续的中间件会执行,最后返回响应。

示例

以下是一个使用中间件的完整示例:

go 复制代码
package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    
    // 注册日志和恢复中间件
    r.Use(gin.Logger())
    r.Use(gin.Recovery())
    
    // 注册自定义中间件
    r.Use(AuthMiddleware())

    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{"message": "pong"})
    })

    r.Run(":8080")
}

func AuthMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        token := c.GetHeader("Authorization")
        if token != "your_secret_token" {
            c.JSON(401, gin.H{"error": "Unauthorized"})
            c.Abort()
            return
        }
        c.Next()
    }
}

总结

中间件是 Gin 中非常强大的特性,通过它可以在请求处理流程中插入额外的逻辑,以满足不同的需求。您可以根据实际情况自由组合使用。

相关推荐
徐小黑ACG13 小时前
Golang 基础05 结构体struct
开发语言·算法·golang
北冥you鱼15 小时前
Go 语言空接口(interface{})使用场景与最佳实践
开发语言·windows·golang
newerp16 小时前
Execution Trace 深入实战:可视化调度与系统停顿分析
后端·程序员·go
Wang's Blog17 小时前
Java 中间件之 RabbitMQ 快速入门: 异步通讯的优缺点
java·中间件·java-rabbitmq
徐小黑ACG18 小时前
Golang 基础06 接口interface
开发语言·后端·golang
小小龙学IT19 小时前
Go 语言 cgo 与 C/C++ 互操作深度解析:从 fwlib 直连到工业数采网关实战系列
c语言·c++·golang
牛奔19 小时前
mise 管理多版本 Go 项目
开发语言·前端·chrome·后端·golang
newerp21 小时前
Go 性能分析工具 pprof:CPU、Heap 与 Goroutine 实战
后端·程序员·go
Wang's Blog1 天前
Java 中间件之 RabbitMQ 快速入门: MQ 常见技术选型对比
java·中间件·java-rabbitmq
用户125758524361 天前
Golang后台管理框架推荐:完整后台、Admin Panel、CRUD生成器如何选?
go