基于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 上的, 所以就丢失了这个功能。

相关文章
|
20小时前
|
机器学习/深度学习 JSON 编译器
C++ 资源大全:标准库、Web框架、人工智能等 | 最全整理
C++ 资源列表,内容包括: 标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等
8 1
|
2天前
|
设计模式 开发框架 数据库
Python Web开发主要常用的框架
【5月更文挑战第12天】Python Web开发框架包括Django、Flask、Tornado和Pyramid。Django适用于复杂应用,提供ORM、模板引擎等全套功能;Flask轻量级,易于扩展,适合小型至中型项目;Tornado擅长处理高并发,支持异步和WebSockets;Pyramid灵活强大,可适配多种数据库和模板引擎,适用于各种规模项目。选择框架需依据项目需求和技术栈。
13 2
|
3天前
|
Go
golang学习3,golang 项目中配置gin的web框架
golang学习3,golang 项目中配置gin的web框架
|
14天前
|
中间件 Go API
【Go 语言专栏】Go 语言中的 Web 框架比较与选择
【4月更文挑战第30天】本文对比了Go语言中的四个常见Web框架:功能全面的Beego、轻量级高性能的Gin、简洁高效的Echo,以及各自的性能、功能特性、社区支持。选择框架时需考虑项目需求、性能要求、团队经验和社区生态。开发者应根据具体情况进行权衡,以找到最适合的框架。
|
14天前
|
机器学习/深度学习 前端开发 数据可视化
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
数据分析web可视化神器---streamlit框架,无需懂前端也能搭建出精美的web网站页面
|
14天前
|
开发框架 前端开发 JavaScript
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
学会Web UI框架--Bootstrap,快速搭建出漂亮的前端界面
|
14天前
|
缓存 前端开发 安全
Python web框架fastapi中间件的使用,CORS跨域详解
Python web框架fastapi中间件的使用,CORS跨域详解
|
14天前
|
API 数据库 Python
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
Python web框架fastapi数据库操作ORM(二)增删改查逻辑实现方法
|
14天前
|
关系型数据库 MySQL API
Python web框架fastapi数据库操作ORM(一)
Python web框架fastapi数据库操作ORM(一)
|
14天前
|
Python
python web框架fastapi模板渲染--Jinja2使用技巧总结
python web框架fastapi模板渲染--Jinja2使用技巧总结