Golang使用Gin框架实现路由分类处理请求流程详解
作者:富士康质检员张全蛋 发布时间:2024-05-29 22:07:41
在前面已经学习了gin框架如何处理请求,解析请求,返回数据。
在实际的项目当中,项目往往是以模块化来进行划分和开发的,所谓的模块化就是按照功能来划分,比如会有产品模块,会有用户模块,会将用户相关的进行统一的开发,放到用户模块当中,和产品相关的放在产品相关的模块当中,这样即方便开发者进行统一的开发也方便在系统的维护过程当中方便维护。
背景
在实际的项目开发中,均是模块化开发。同一模块内的功能接口,往往会有相同的接口前缀。比如如下所示:
例如在系统中有用户模块,用户有不同注册、登录、用户信息
比如注册是register接口,它属于是用户模块,因此会在register前面有一个字段,这个字段表示的是用户模块是user模块,第二级的url register才表示用户模块 * 册的功能。
第一级是用户的模块,第二级代表该模块下面的什么功能。删除是删除用户的id。
注册:http://Localhost:9000/user/register
登录:http://localhost:9000/user/login
用户信息:http://localhost:9000/user/info
删除: http://localhost:9080/user/1001
类似这种接口前缀统一,均属于相同模块的功能接口。可以使用路由组进行分类处理。
可以看到不同的接口是按照两级的分类来定义的。
类似这种接口前缀统一,均属于相同模块的功能接口。可以使用路由组进行分类处理。
Group
所谓的路由组就是这些接口的前缀第一级都是以user开头,表示都是属于同一个模块,既然都是属于同一个模块,那么能不能对其进行统一的处理呢?当然可以,可以使用group进行划分,就是路由组。
group方法默认有两个参数,第一个参数是分组的url是分组的第一级,也就是模块名称。第二个参数是可变类型的参数,这里可以不需要填。
func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup
这里返回的是结构体指针类型*RouterGroup,这个结构体类型其实就是路由组的意思。在这个路由组当中,实现了很多的方法,这些方法都是这个接口里面的。
type IRoutes interface {
Use(...HandlerFunc) IRoutes
Handle(string, string, ...HandlerFunc) IRoutes
Any(string, ...HandlerFunc) IRoutes
GET(string, ...HandlerFunc) IRoutes
POST(string, ...HandlerFunc) IRoutes
DELETE(string, ...HandlerFunc) IRoutes
PATCH(string, ...HandlerFunc) IRoutes
PUT(string, ...HandlerFunc) IRoutes
OPTIONS(string, ...HandlerFunc) IRoutes
HEAD(string, ...HandlerFunc) IRoutes
StaticFile(string, string) IRoutes
StaticFileFS(string, string, http.FileSystem) IRoutes
Static(string, string) IRoutes
StaticFS(string, http.FileSystem) IRoutes
}
gin框架中可以使用路由组来实现对路由的分类。路由组是router.Group中的一个方法,用于对请求进行分组。如下案例所示:
register和login info都是对应着不同的请求类型。
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
engine := gin.Default()
routeGroup := engine.Group("/user")
routeGroup.POST("/register", func(c *gin.Context) {
fullPath := "用户注册" + c.FullPath()
fmt.Println(fullPath)
c.Writer.WriteString(fullPath)
})
engine.Run()
}
在多路由的分组处理,可以使用engine.Group去处理我们的请求,方便按照我们的请求进行分类,然后也方便我们进行开发。
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
engine := gin.Default()
routeGroup := engine.Group("/user")
routeGroup.POST("/register",registerHandler)
routeGroup.POST("/login", loginHandler)
routeGroup.DELETE("/:id", deleteHandler)
engine.Run()
}
func registerHandler(c *gin.Context) {
fullPath := "用户注册" + c.FullPath()
fmt.Println(fullPath)
c.Writer.WriteString(fullPath)
}
func loginHandler(c *gin.Context) {
fullPath := "用户登入" + c.FullPath()
fmt.Println(fullPath)
c.Writer.WriteString(fullPath)
}
func deleteHandler(c *gin.Context) {
fullPath := "用户删除" + c.FullPath()
userID := c.Param("id")
fmt.Println(fullPath)
c.Writer.WriteString(fullPath + " userID:" + userID)
}
在实际的过程当中设计到多模块的开发那么就可以使用路由分组的功能,会大大的提高开发效率。提高代码的可读性。
来源:https://blog.csdn.net/qq_34556414/article/details/130593811


猜你喜欢
- 大家先看一下Python os模块中的部分函数python 路径相关的函数 os.listdir(dirname):列出dirname下的目
- 本文实例讲述了Python数据结构与算法之常见的分配排序法。分享给大家供大家参考,具体如下:箱排序(桶排序)箱排序是根据关键字的取值范围1~
- 本文借鉴于张广河教授主编的《数据结构》,对其中的代码进行了完善。从某源点到其余各顶点的最短路径Dijkstra算法可用于求解图中某源点到其余
- HTTPS介绍HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端
- python版本: 3.6pandas版本: 0.23.4行索引索引行有三种方法,分别是 loc iloc iximport pandas
- 本文实例讲述了Python实现监控程序执行时间并将其写入日志的方法。分享给大家供大家参考。具体实现方法如下:# /usr/bin/pytho
- 实例引入我们知道 Python 是一种动态语言,在声明一个变量时我们不需要显式地声明它的类型,例如下面的例子:a = 2print('
- 从这一章开始进入正式的算法学习。首先我们学习经典而有效的分类算法:决策树分类算法。1、决策树算法决策树用树形结构对样本的属性进行分类,是最直
- 首先先和大家讲一讲SQL Server恢复master数据库方法,具体步骤如下第一步:复制model.mdf、mastlog.ldf、mod
- 在Spring boot开发中,需要在application.yml文件里配置数据库的连接信息,或者在启动时传入数据库密码,如果不加密,传明
- 实际的项目,存在多张表的关联关系。不可能在一张表里面就能检索出所有数据。如果没有表连接的话,那么我们就需要非常多的操作。比如需要从A表找出限
- 容器与可迭代对象在正式开始前先补充一些基本概念在 Python 中存在容器 与 可迭代对象容器:用来存储多个元素的数据结构,例如 列表,元组
- 如下所示:# -*- coding=utf-8 -*- import urllib2import socketimport timeurls
- Dreamweaver MX 2004新增加了表格宽度辅助线功能,让我们在编辑网页表格的时候能清楚地看到表格中各单元的宽度以及变化,很直观。
- 一、使用docker部署mysql主从 实现主从复制此次使用的是windows版本docker,mysql版本是5.71、使用docker获
- 在Web开发中,JavaScript的一个很重要的作用就是对DOM进行操作,可你知道么?对DOM的操作是非常昂贵的,因为这会导致浏览器执行回
- 本文实例讲述了Python基于递归算法实现的汉诺塔与Fibonacci数列。分享给大家供大家参考,具体如下:这里我们通过2个例子,学习pyt
- by cpglkg <script>var arr=[5,10,15];function rect(arr,width){&nb
- 效果图如下:Demo演示地址:点击这里主要的JS代码如下:var tbody = document.querySelector('#
- onmouseout 发现它的触发太敏感,当经过层内文字链时,即触发onmousetout事件,功能不能正常显示,经过一番搜索,整理出来,供