Gin框架的分组路由与分组中间件

在Gin框架中,分组路由和分组中间件是实现RESTful API时非常重要的特性。通过分组路由,我们可以将相关的路由组织在一起,提高代码的可读性和可维护性。而分组中间件则允许我们在一个路由组内统一应用一系列的中间件,对请求进行预处理或后处理。

下面,我们将详细介绍Gin的分组路由和分组中间件。

1. 分组路由

Gin的Group方法允许我们创建路由组,可以将一系列具有相同前缀的路由组合在一起。这样做不仅使得路由定义更加清晰,还可以通过为路由组添加中间件来统一处理这些路由的请求。

2. 分组中间件

分组中间件通过Use方法应用到路由组上,这个中间件会在该组内的所有路由处理之前或之后执行。这是处理日志记录、认证、权限校验等常见需求的强大工具。

3. 中间件写法

在Gin中,中间件本质上是一个具有gin.HandlerFunc签名的函数。这里介绍两种常见的中间件写法:

  • 全局中间件 :直接绑定到全局的*gin.Engine实例上。
  • 分组中间件 :通过Group方法创建的路由组调用Use方法添加。
4. 代码示例
go 复制代码
package main

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

type UserInfo struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

type ArticleInfo struct {
	Title   string `json:"title"`
	Content string `json:"content"` 
}

type Response struct {
	Code int        `json:"code"`
	Data interface{} `json:"data"` 
	Msg  string     `json:"msg"`
}

func UserListView(c *gin.Context) {
	var userList []UserInfo = []UserInfo{
		{"a", 1},
		{"b", 2},
		{"c", 3},
	}
	c.JSON(200, Response{0, userList, "ok"})
}

func ArticleListView(c *gin.Context) {
	var articleList []ArticleInfo = []ArticleInfo{
		{"go", "article 1 content"},
		{"java", "article 2 content"},
		{"c", "article 3 content"},
	}
	c.JSON(200, Response{0, articleList, "ok"})
}

func getOne(c *gin.Context) {
	c.JSON(200, Response{0, UserInfo{"a", 1}, "ok"})
}

func userHandler() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("userHandler...in")
		c.Next()
		fmt.Println("userHandler...out")
	}
}

func articleHandler(c *gin.Context) {
	fmt.Println("articleHandler...in")
	c.Next()
	fmt.Println("articleHandler...out")
}

func main() {
	r := gin.Default()

	// 分组路由和中间件
	apiGroup := r.Group("/api")
	{
		userManage := apiGroup.Group("userManage").Use(userHandler())
		{
			userManage.GET("/users", UserListView)
			userManage.GET("/user/:id", getOne) // 示例:获取单个用户
		}

		articleManage := apiGroup.Group("articleManage").Use(articleHandler)
		{
			articleManage.GET("/articles", ArticleListView)
			// 可以在这里添加更多与文章相关的路由
		}
	}

	r.Run(":8080")
}
相关推荐
源代码•宸6 小时前
简版抖音项目——项目需求、项目整体设计、Gin 框架使用、视频模块方案设计、用户与鉴权模块方案设计、JWT
经验分享·后端·golang·音视频·gin·jwt·gorm
三水不滴7 小时前
消息队列消费性能优化:批量消费 + 手动 ACK 提升吞吐量
经验分享·笔记·中间件·性能优化
nix.gnehc9 小时前
Go进阶攻坚+专家深耕级学习清单|聚焦高并发、高性能中间件/底层框架开发(Java开发者专属)
学习·中间件·golang
金刚猿1 天前
05_虚拟机中间件部署_ubuntu 系统 安装 Redis 7.0.15
redis·ubuntu·中间件
GEM的左耳返1 天前
Java面试深度剖析:从JVM到云原生的技术演进
jvm·spring boot·云原生·中间件·java面试·分布式架构·ai技术
cuber膜拜4 天前
LangChain v1.0 Middleware(中间件)使用指南
python·中间件·langchain·langgraph
lisypro14 天前
gin-vue-admin项目使用命令行进行启动
前端·vue.js·golang·gin
桂花很香,旭很美6 天前
[7天实战入门Go语言后端] Day 5:中间件与业务分层——日志、鉴权与请求超时
开发语言·中间件·golang
金刚猿6 天前
03_虚拟机中间件部署_Nacos 部署单机模式、配置鉴权
linux·中间件·nacos·配置鉴权
黄俊懿7 天前
【架构师从入门到进阶】第一章:架构设计基础——第二节:架构设计原则
分布式·后端·中间件·架构