前言

感谢开源项目gin-vue-admin,以及1010工作室的教程,项目文档
我只是在跟着学习,然后记录下笔记而已,可能会有新的代码加入,但是本质还是跟着学习的一个过程。

什么是路由分组

对router创建Group就是分组,对同一分组会拥有统一前缀和统一中间件。
诚然这对于项目的规范管理是非常重要的

写法:router:=gin.Default()

v1 := router.Group("/v1")
v1.POST("/login", loginEndpoint)
v1.POST("/submit", submitEndpoint)
v1.POST("/read", readEndpoint)

这里的v1可以不带下划线,也是被允许的
在main.go中搭建以下代码

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件v1 := r.Group("v1")v1.GET("test", func(c *gin.Context){fmt.Println("我在分组方法内部")})r.Run(":1010") // listen and serve on 0.0.0.0:8080
}

在postman中组件请求,直接带着分组v1进行请求。


修改代码如下,增加返回

func main() {r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件v1 := r.Group("v1")v1.GET("test", func(c *gin.Context){fmt.Println("我在分组方法内部")c.JSON(200, gin.H{"success":true,})})r.Run(":1010") // listen and serve on 0.0.0.0:8080
}

postman再次发起请求


值得注意的是,这里虽然只是在创建路由分组上实现了一个请求,但是实际上可以继续创建其他请求,例如这里使用是的test,完全可以有其他的test1、test2、test3等等,但是共同的特征是他们都有一个共有前缀v1

为什么分组

  • 分组可以使路由结构更加清晰
  • 更加方便路由的管理

什么是中间件&使用

在请求到达路由的方法的前和后进行的一系列操作
在GIN为我们提供的基础路由中,实际上内部已经配置了两个基础中间件,看下GIN.Default的源码

// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {debugPrintWARNINGDefault()engine := New()engine.Use(Logger(), Recovery())return engine
}

这里是使用好了Logger()中间件和Recovery()中间件。
通过Use()进行加载中间件,如果我们写中间件,使用加载时也是同样的使用这种方式

创建中间件

func middel()gin.HandlerFunc{return func(c *gin.Context) {fmt.Println("我在方法前")c.Next()fmt.Println("我在方法后")}
}

在v1分组上挂载中间件

func main() {r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件v1 := r.Group("v1").Use(middel())v1.GET("test", func(c *gin.Context){fmt.Println("我在分组方法内部")c.JSON(200, gin.H{"success":true,})})r.Run(":1010") // listen and serve on 0.0.0.0:8080
}

如果多个中间件时,可以Use(middel1(), middel2()),也可以Use(middel1()).Use(middel2())。
通过上面的方式就使得v1挂载上中间件,也可以说是v1拥有了中间件。

postman组织请求


通过查看打印不难发现,中间件中,c.Next()前是在进入处理请求方法内部前,而c.Next()后则是在处理完请求方法后,通过中间件的方式我们就可以实现在处理请求前后实现不同的功能
当存在多个中间件时,类似于洋葱的结构

即先执行第一个中间件middel1前,执行middel2前,执行请求方法,执行middel2后,执行middel1后,类似于一个洋葱插进去。

再增加一个中间件,看下示例:

func middel()gin.HandlerFunc{return func(c *gin.Context) {fmt.Println("我在方法1前")c.Next()fmt.Println("我在方法1后")}
}
func middeltwo()gin.HandlerFunc{return func(c *gin.Context) {fmt.Println("我在方法2前")c.Next()fmt.Println("我在方法2后")}
}func main() {r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件v1 := r.Group("v1").Use(middel(), middeltwo())v1.GET("test", func(c *gin.Context){fmt.Println("我在分组方法内部")c.JSON(200, gin.H{"success":true,})})r.Run(":1010") // listen and serve on 0.0.0.0:8080
}

组织postman请求


这就清晰的展示了多个中间件是怎么使用,并且内部是如何运行的

gin的中间件和路由分组相关推荐

  1. 【gin学习笔记】05 gin的中间件和路由分组

    本文学习视频https://www.bilibili.com/video/BV18C4y1p7Fe/?spm_id_from=333.788 什么是路由分组 对router创建group就是分组,同一 ...

  2. Gin 框架学习笔记(01)— 自定义结构体绑定表单、绑定URI、自定义log、自定义中间件、路由组、解析查询字符串、上传文件、使用HTTP方法

    要实现一个 API 服务器,首先要考虑两个方面:API 风格和媒体类型.Go 语言中常用的 API 风格是 RPC 和 REST,常用的媒体类型是 JSON.XML 和 Protobuf.在 Go A ...

  3. gin框架学习-路由分组和中间件

    路由分组和中间件 前言 一.路由分组 二.中间件 1.中间件简介 2.定义中间件 3.注册中间件 1)注册全局中间件 2)单独注册某个路由中间件 3)注册路由组中间件 4.中间件的嵌套 1)Next( ...

  4. golang学习笔记(19)-gin路由分组和中间件

    gin路由分组和中间件 这里写目录标题 gin路由分组和中间件 路由分组 中间件 使用中间件 创建中间件 简单中间件应用实验 路由分组 路由分组可以使路由结构更加清晰,更加方便管理路由. 官方演示代码 ...

  5. go gin路由分组route group

    package mainimport "github.com/gin-gonic/gin"func main() {r := gin.Default() 路由分组//r.GET(& ...

  6. laravel的路由分组,中间件,命名空间,子域名,路由前缀(四)

    laravel的路由分组,就是把一些具有相同特征的路由进行分组,比如一些路由需要进行验证,一些路由有共同的前缀,一些路由有相同的控制器命名空间等. 这样把路由组合在一起,方便管理,维护性更好. Rou ...

  7. Go Gin web框架的路由原理及中间件原理

    一.Gin框架的路由原理: 参考: go路由httprouter中的压缩字典树算法图解及c++实现 Golang-gin框架路由原理 首先了解下什么是路由? 简而言之,http路由即是一条http请求 ...

  8. gin:包管理和路由拆分

    文章目录 前言 包管理 文件内package的命名 引用的起点 gin路由拆分 添加一个路由 通过继承减少方法的层级 gva的拆分是否过于麻烦? 总结 前言 gin的路由拆分,实际就是路由模块化分组. ...

  9. gin context和官方context_[系列文章] Gin框架 - 安装和路由配置

    概述 看下 Gin 框架的官方介绍: Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httprouter,速 ...

最新文章

  1. null未定义_PHP的isset()、is_null、empty()使用总结
  2. kafka安装_安装Kafka
  3. linux cache 内核参数,Linux内核中drop_caches参数
  4. 沉没成本(要不要买房)
  5. 表达式求值(二叉树方法/C++语言描述)(二)
  6. Windows Sysinternals Desktops v1.0 发布 - 超简单的虚拟桌面程序
  7. ubuntu快速清理磁盘垃圾
  8. 1269: [AHOI2006]文本编辑器editor
  9. 业界资讯:adobe creative suite 5.5你准备好了吗?
  10. linux 增加maven内存,Ubuntu Linux系统下Apache Maven的安装和配置
  11. powerbuilder11的webform发布和webservices调用实践
  12. 我的世界seus光影java版下载_minecraft SEUS V11.0光影存档
  13. linux系统论文题目大全_操作系统专业论文选题 操作系统毕业论文题目如何定
  14. pbr材质系统和vray材质系统有什么不同
  15. 基于beautifulSoup进行电影网站排名的获取与格式化输出
  16. 报告:使用加密货币进行跨境汇款的人数越来越多
  17. linux nc命令 测试网络连通性
  18. c++新手入门(不定时更新,已肝18500字)
  19. 字符串逆序不一样的解法(递归)
  20. UltraEdit脱机激活工具

热门文章

  1. 用好笔记本软件,它是你的第二大脑
  2. 北京大学801计算机基础综合,盛世清北2021北京大学869计算机基础综合考研参考书目...
  3. Android 橡皮擦功能的实现
  4. 探秘 Vue3.0 - Composition API 在真实业务中的尝鲜姿势
  5. Ad Click Prediction: a View from the Trenches (2013)论文阅读
  6. 关于反馈的邮件_关于反馈
  7. 软件工程-大纲/笔记-1.-2.(定义)
  8. 加强赛(二)B - Rotten Ropes POJ - 2291
  9. 微信公众号开发过程整理
  10. React中Fragment标签和空标签的使用(vue中的template标签类似)