基于Gin封装Web框架 - 4. 注册路由组

简介: 基于Gin封装Web框架 - 4. 注册路由组

基于Gin封装Web框架 - 4. 注册路由组

源码参考: https://github.com/go-jarvis/gin-rum

在 gin 中有路由组的概念, 可以理解为路由的 prefix。

rum 增加路由组

  1. 在 Rum 中增加路由组 rg *gin.RouterGroup
type Rum struct {
    *gin.Engine
    rg *gin.RouterGroup
}
  1. 有了路由组字段之后, 就需要使用起来。 在 Mount() 方法中, 增加 group name 传参数
// Mount 参数中增加了 group 的传参
func (rum *Rum) Mount(group string, classes ...ClassController) *Rum {

    // 04.1. 注册路由组
    rum.rg = rum.Group(group)

    for _, class := range classes {
        // 03.3. 将 rum 传入到控制器中
        class.Build(rum)
    }

    return rum
}

有了 group name 之后, 肯定是要将其注册到 rum engine 中。

rum.rg = rum.Group(group)
  1. 为了能在不改变控制器的情况下使用 路由组 路径, 需要 重载 rum 的 Handle 方法。
// Handle 重载 gin.Engine 的 Handle 方法。
// 04.2. 这样子路由注册的时候, 就直接挂载到了 RouterGroup 上, 有了层级关系
func (rum *Rum) Handle(httpMethod, relativePath string, handlers ...gin.HandlerFunc) {
    rum.rg.Handle(httpMethod, relativePath, handlers...)

    return rum
}

重载 Handle 方法之后, 控制器的子路由就被路由组分组了。

挂载路由组

main.go 中, 为 Mount 方法增加路由组 v1, 并添加了一个新的路由组 v2

    // 2. 注册路由
    g.Mount("/v1",
        classes.NewIndex(),
    )
    // 04.2. 注册多个路由组。
    g.Mount("/v2",
        classes.NewIndex(),
    )

启动服务后,可以看到两组路由, v1 和 v2

# cd cmd/rum/ && go run .
[GIN-debug] GET    /v1/                      --> github.com/tangx-labs/gin-rum/classes.handlerIndex (3 handlers)
[GIN-debug] GET    /v2/                      --> github.com/tangx-labs/gin-rum/classes.handlerIndex (3 handlers)
[GIN-debug] Listening and serving HTTP on :8089

遗留问题

在 gin 中, RouterGroup 是可以一级一级往下扩展的。 但是在当前 rum 中所有的路由组都是挂载到 gin.Engine 上的, 所以就丢失了这个功能。

相关文章
|
7天前
|
中间件 Go API
【Go 语言专栏】Go 语言中的 Web 框架比较与选择
【4月更文挑战第30天】本文对比了Go语言中的四个常见Web框架:功能全面的Beego、轻量级高性能的Gin、简洁高效的Echo,以及各自的性能、功能特性、社区支持。选择框架时需考虑项目需求、性能要求、团队经验和社区生态。开发者应根据具体情况进行权衡,以找到最适合的框架。
|
8天前
|
机器学习/深度学习 前端开发 数据可视化
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
|
8天前
|
开发框架 前端开发 JavaScript
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
|
8天前
|
缓存 前端开发 安全
Python web框架fastapi中间件的使用,CORS跨域详解
Python web框架fastapi中间件的使用,CORS跨域详解
|
8天前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
|
8天前
|
关系型数据库 MySQL API
Python web框架fastapi数据库操作ORM(一)
Python web框架fastapi数据库操作ORM(一)
|
8天前
|
Python
python web框架fastapi模板渲染--Jinja2使用技巧总结
python web框架fastapi模板渲染--Jinja2使用技巧总结
|
8天前
|
开发框架 网络协议 前端开发
Python高性能web框架--Fastapi快速入门
Python高性能web框架--Fastapi快速入门
|
8天前
|
网络协议 数据库 开发者
构建高效Python Web应用:异步编程与Tornado框架
【4月更文挑战第29天】在Web开发领域,响应时间和并发处理能力是衡量应用性能的关键指标。Python作为一种广泛使用的编程语言,其异步编程特性为创建高性能Web服务提供了可能。本文将深入探讨Python中的异步编程概念,并介绍Tornado框架如何利用这一机制来提升Web应用的性能。通过实例分析,我们将了解如何在实际应用中实现高效的请求处理和I/O操作,以及如何优化数据库查询,以支持更高的并发用户数和更快的响应时间。
|
8天前
|
JSON 前端开发 网络架构
Django的web框架Django Rest_Framework精讲(四)
Django的web框架Django Rest_Framework精讲(四)