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()
}

Golang使用Gin框架实现路由分类处理请求流程详解

Golang使用Gin框架实现路由分类处理请求流程详解

在多路由的分组处理,可以使用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

标签:Golang,Go,Gin,路由分类,处理请求
0
投稿

猜你喜欢

  • SQL Server 使用触发器(trigger)发送电子邮件步骤详解

    2024-01-22 11:15:39
  • Python统计时间内的并发数代码实例

    2022-02-17 18:24:16
  • 产品设计与用户体验

    2009-02-02 10:15:00
  • PyQt5实现简易计算器

    2022-12-14 02:12:38
  • Python自动化办公之Word转PDF的实现

    2022-10-04 05:30:50
  • 浅谈vue异步数据影响页面渲染

    2024-04-30 10:45:19
  • 商品评论的设计

    2009-12-23 13:06:00
  • pytorch collate_fn的基础与应用教程

    2021-06-03 02:55:57
  • Python asyncio的一个坑

    2022-04-06 20:58:28
  • Mysql 索引 BTree 与 B+Tree 的区别(面试)

    2024-01-13 03:10:32
  • mysql存数组的实例代码和方法

    2024-01-23 22:45:21
  • python数据结构:数据类型

    2022-05-05 01:54:19
  • apache集成php5.6方法分享

    2023-09-06 09:03:54
  • Mysql中一千万条数据怎么快速查询

    2024-01-15 06:57:05
  • vue实现登录后页面跳转到之前页面

    2024-04-27 16:00:53
  • Python Flask 实现 HTML 文件压缩案例代码(9 级压缩)

    2021-05-22 15:22:13
  • asp如何判断偶数和奇数?

    2010-01-12 20:16:00
  • 仅用50行Python代码实现一个简单的代理服务器

    2022-11-26 14:44:57
  • Python3爬虫教程之利用Python实现发送天气预报邮件

    2023-10-25 14:06:44
  • Python实现完全数的示例详解

    2021-11-21 20:09:30
  • asp之家 网络编程 m.aspxhome.com