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

news/2024/10/11 6:25:53/文章来源:https://blog.csdn.net/qq_29752857/article/details/141914078

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

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

1. 分组路由

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

2. 分组中间件

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

3. 中间件写法

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

  • 全局中间件:直接绑定到全局的*gin.Engine实例上。
  • 分组中间件:通过Group方法创建的路由组调用Use方法添加。
4. 代码示例
package mainimport ("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")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ldbm.cn/p/438849.html

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内外大模型汇总(包括科大星火、文心一言、通义千问、智普清言、华为大模型)

国内外大模型汇总 1. 科大讯飞星火认知大模型 主要特点: 多语言能力:以中文为核心,同时支持多语言处理,能够进行跨语种的语言理解和生成。 广泛的任务能力:具备内容生成、语言理解、知识问答、推理、数学计算、代码…

【WPF】WPF学习之【二】布局学习

WPF布局学习 常用布局Grid网格布局StackPanel 布局CanvasDockPanel布局WrapPanel布局 常用布局 1、StackPanel: 学习如何使用StackPanel进行垂直和水平布局。 2、Grid: 掌握Grid的网格布局技术。 3、Canvas: 了解Canvas的绝对定位布局。 4、DockPanel: 学习DockPanel的停靠…

ELK在Linux上部署教程

Docker Compose搭建ELK Elasticsearch默认使用mmapfs目录来存储索引。操作系统默认的mmap计数太低可能导致内存不足,我们可以使用下面这条命令来增加内存 sysctl -w vm.max_map_count262144创建Elasticsearch数据挂载路径 mkdir -p /echola/elasticsearch/data对…

需要恢复 Android 手机的存储卡?6 个Android 数据恢复应用程序(可用于手机内存 + MicroSD 卡)

Android 手机的存储卡数据丢失,您最需要做的: 停止使用手机拍摄更多照片/视频,停止发送消息或在手机上执行任何操作,从 Android 手机中取出 SD 卡,因为进一步使用手机可能会导致永久数据覆盖。 我们不建议您下载 And…

erlang学习:用ETS和DETS存储数据2

今日学习创建一个ETS表 下面是代码实现 -module(lib_trigrams).-export([make_ets_set/0, make_ets_ordered_set/0]). for_each_trigram_in_the_english_language(F, A0) ->{ok, Bin0} file:read_file("test.txt"),Bin zlib:gunzip(Bin0),scan_word_list(binar…

MLLM(二)| 阿里开源视频理解大模型:Qwen2-VL

2024年8月29日,阿里发布了 Qwen2-VL!Qwen2-VL 是基于 Qwen2 的最新视觉语言大模型。与 Qwen-VL 相比,Qwen2-VL 具有以下能力: SoTA对各种分辨率和比例的图像的理解:Qwen2-VL在视觉理解基准上达到了最先进的性能&#…

LlamaIndex 使用 RouterOutputAgentWorkflow

LlamaIndex 中提供了一个 RouterOutputAgentWorkflow 功能,可以集成多个 QueryTool,根据用户的输入判断使用那个 QueryEngine,在做查询的时候,可以从不同的数据源进行查询,例如确定的数据从数据库查询,如果…

从文字到世界:一键生成全景3D场景的技术革命

随着虚拟现实(VR)、增强现实(AR)以及游戏行业的蓬勃发展,3D场景的生成技术正变得越来越重要。传统的3D建模方法不仅耗时且需要专业的技能,而新兴的技术则试图简化这一过程。本文将介绍一种全新的技术框架——LayerPano3D,它能够根据简单的文本输入,自动生成全景、可探索…

(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面:本报告所有代码公开在附带资源中,无法下载代码资源的伙伴私信留下邮箱,小编24小时内回复 一、实验目的 1、实验目标 学习掌握SVM(Support Vector Machine)算法思想,利用MATLAB的特定工具箱和库函…

ORA-24067: exceeded maximum number of subscribers for queue ADMIN.SMS_MT_QUEUE

临时处理办法: delete from aq$_ss_MT_tab_D; delete from aq$_ss_MT_tab_g; delete from aq$_ss_MT_tab_h; delete from aq$_ss_MT_tab_i; delete from aq$_ss_MT_tab_p; delete from aq$_ss_MT_tab_s; delete from aq$_ss_MT_tab_t; commit; 根本处理办法&#x…

电脑硬盘数据丢失了怎么恢复?简单实用的硬盘数据找回的方法

我们的电脑使用硬盘作为存储设备来保存数据,硬盘里的数据是存储在扇区上,这些存储数据的单元则位于表面有磁性材料的旋转的盘片上。硬盘内部的磁头悬浮于高速旋转的盘片上,用于读写和检索数据。 假如我们使用电脑时不小心删除了某个文件&…

One-Shot Hierarchical Imitation Learning of Compound Visuomotor Tasks

发表时间:25 Oct 2018 论文链接:https://readpaper.com/pdf-annotate/note?pdfId4500198746683498497&noteId2453372035670907392 作者单位:Berkeley AI Research Motivation:我们考虑从执行任务的人类的单个视频中学习真…

[数据集][目标检测]轮胎缺陷检测数据集VOC+YOLO格式2154张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2154 标注数量(xml文件个数):2154 标注数量(txt文件个数):2154 标注…

【PostgreSQL】地理空间数据的数据类型定义、索引优化、查询优化策略

PostgreSQL 是开源关系型数据库,对于地理空间数据的处理提供了很好的支持。在处理地理空间数据时,优化索引和查询的性能至关重要,因为地理空间操作通常涉及大量的数据计算和复杂的几何形状比较。 一、地理空间数据类型 注意geometry和geogra…

物联网之ESP32控制GPIO输出点亮LED、网页控制LED开关

MENU 前言原理GPIO引脚LED 硬件电路设计软件设计1、点亮一颗LED2、闪烁的LED3、网页控制LED开关 前言 不论学习什么单片机,最简单的外设莫过于IO口的高低电平控制LED,本文介绍如何使用Arduino控制ESP32的GPIO输出。通过本文的学习,掌握一定的…

boost和buck-boost拓扑原理

如果是交流电可以用变压器升压: boost升压直接的问题就是电流随着电压的升高会降低,这个时候可以使用PD技术升高功率 boost拓扑: MOS关断的时候电感右侧的电压是VO VD,电感左侧的电压是VIN,显然电感右侧电压大于电池电压VIN: BU…

2024年高教社杯数学建模国赛C题超详细解题思路分析

本次国赛预测题目难度,选题人数如下所示 难度评估 A:B:C 1.8:1.3:1 D:E1.5:1 选题人数 A:B:C 1:1.5:2.8 D:E0.5:1.2 C题一直以来都是竞赛难度最低、选题人数最多的一道本科生选题,近三年C题的选题人数一直都是总参赛队伍的一半左右,2023年…

奥威让您更懂现金流情况

企业现金流一旦出了问题都是大问题,会直接影响到企业的日常运作,甚至直接关系到企业能不能继续存活,因此现金流量表是企业财务分析中重要报表之一,也是企业监控财务监控情况的重要手段之一。那么这么重要的一份现金流量表该怎么做…

Django+Vue协同过滤算法图书推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者&…

《Exemplar Free Class Agnostic Counting》CVPR2022

概述 摘要: 这篇论文提出了一种新颖的“无范例类别无关计数”(Exemplar Free Class Agnostic Counting)方法,旨在测试时对新类别的对象进行计数,而无需访问该类别的标记训练数据。以往的类别无关计数方法无法在完全自…