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

 更新时间:2023年05月16日 11:01:29   作者:富士康质检员张全蛋  
Gin是一个golang的微框架,封装比较优雅,具有快速灵活,容错方便等特点,这篇文章主要介绍了Golang使用Gin框架实现路由分类处理请求,感兴趣的同学可以参考下文

在前面已经学习了gin框架如何处理请求,解析请求,返回数据。

在实际的项目当中,项目往往是以模块化来进行划分和开发的,所谓的模块化就是按照功能来划分,比如会有产品模块,会有用户模块,会将用户相关的进行统一的开发,放到用户模块当中,和产品相关的放在产品相关的模块当中,这样即方便开发者进行统一的开发也方便在系统的维护过程当中方便维护。

背景

在实际的项目开发中,均是模块化开发。同一模块内的功能接口,往往会有相同的接口前缀。比如如下所示:

例如在系统中有用户模块,用户有不同注册、登录、用户信息

比如注册是register接口,它属于是用户模块,因此会在register前面有一个字段,这个字段表示的是用户模块是user模块,第二级的url register才表示用户模块下注册的功能。

第一级是用户的模块,第二级代表该模块下面的什么功能。删除是删除用户的id。

类似这种接口前缀统一,均属于相同模块的功能接口。可以使用路由组进行分类处理。

可以看到不同的接口是按照两级的分类来定义的。

类似这种接口前缀统一,均属于相同模块的功能接口。可以使用路由组进行分类处理。

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

在实际的过程当中设计到多模块的开发那么就可以使用路由分组的功能,会大大的提高开发效率。提高代码的可读性。

到此这篇关于Golang使用Gin框架实现路由分类处理请求流程详解的文章就介绍到这了,更多相关Go路由分类处理请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言中实现enum枚举的方法详解

    Go语言中实现enum枚举的方法详解

    枚举,即 enum,可用于表示一组范围固定的值,它能助我们写出清晰、安全的代码,那么你是否了解过 Go 中的枚举呢?下面就跟随小编一起来学习一下Go语言中实现enum枚举的常用方法吧
    2024-02-02
  • Go项目配置管理神器之viper的介绍与使用详解

    Go项目配置管理神器之viper的介绍与使用详解

    viper是一个完整的 Go应用程序的配置解决方案,它被设计为在应用程序中工作,并能处理所有类型的配置需求和格式,下面这篇文章主要给大家介绍了关于Go项目配置管理神器之viper的介绍与使用,需要的朋友可以参考下
    2023-02-02
  • 在Golang中实现RSA算法的加解密操作详解

    在Golang中实现RSA算法的加解密操作详解

    RSA 是一种非对称加密算法,广泛使用于数据的安全传输,crypto/rsa 是 Golang 中实现了 RSA 算法的一个标准库,提供了生成公私钥对、加解密数据、签名和验签等功能,本文给大家介绍了在Golang中实现RSA算法的加解密操作,需要的朋友可以参考下
    2023-12-12
  • 源码分析Go语言中gofmt实现原理

    源码分析Go语言中gofmt实现原理

    gofmt 是 Go 语言官方提供的一个工具,用于自动格式化 Go 源代码,使其符合 Go 语言的官方编码风格,本文给大家源码详细分析了Go语言中gofmt实现原理,并通过图文和代码讲解的非常详细,需要的朋友可以参考下
    2024-03-03
  • Golang程序漏洞检测器govulncheck的安装和使用

    Golang程序漏洞检测器govulncheck的安装和使用

    govulncheck 是一个命令行工具,可以帮助 Golang 开发者快速找到项目代码和依赖的模块中的安全漏洞,该工具可以分析源代码和二进制文件,识别代码中对这些漏洞的任何直接或间接调用,本文就给大家介绍一下govulncheck安装和使用,需要的朋友可以参考下
    2023-09-09
  • Golang实现超时退出的三种方式

    Golang实现超时退出的三种方式

    这篇文章主要介绍了Golang三种方式实现超时退出,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Go语言中的init函数特点及用法详解

    Go语言中的init函数特点及用法详解

    在Go语言中,init()函数是一种特殊的函数,用于在程序启动时自动执行一次。它的存在为我们提供了一种机制,可以在程序启动时进行一些必要的初始化操作,为程序的正常运行做好准备,在这篇文章中,我们将详细探讨init()函数的特点、用途和注意事项
    2023-06-06
  • go mod tidy命令的使用

    go mod tidy命令的使用

    gomodtidy命令是Go语言中用于管理项目依赖的工具,主要功能包括移除未使用的依赖项、添加缺失的依赖项以及更新go.sum文件以确保依赖项的正确校验,感兴趣的可以了解一下
    2024-11-11
  • Go结合反射将结构体转换成Excel的过程详解

    Go结合反射将结构体转换成Excel的过程详解

    这篇文章主要介绍了Go结合反射将结构体转换成Excel的过程详解,大概思路是在Go的结构体中每个属性打上一个excel标签,利用反射获取标签中的内容,作为表格的Header,需要的朋友可以参考下
    2022-06-06
  • go语言数据结构之前缀树Trie

    go语言数据结构之前缀树Trie

    这篇文章主要介绍了go语言数据结构之前缀树Trie,文章围绕主题展开详细内容介绍,具有一定得参考价值,需要的小伙伴可以参考一下
    2022-05-05

最新评论