基于Gin封装Web框架 - 3. 初始化 rum 框架

简介: 基于Gin封装Web框架 - 3. 初始化 rum 框架

基于Gin封装Web框架 - 3. 初始化 rum 框架

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

创建 /rum 目录, 将所有 rum 框架相关的东西都放在这里。

rum

创建 rum 对象, 匿名嵌套 gin.Engine, 这样 Rum 对象就可以直接调用 gin.Engine 的所有方法了。

type Rum struct {
    *gin.Engine
}

创建 Rum 对象提供了 2种方式。 Default 和 自定义。

// Default 创建一个默认的 Engine
func Default() *Rum {
    return &Rum{
        Engine: gin.Default(),
    }
}

不管哪种方式, 在注册的时候, 在初始化 Rum 的时候, 都通过 Engine: gin.Default() 指定字段对象。 因此 匿名嵌套字段 / 命名字段 使用同样的方法方式初始化。这个之前困扰了我一段时间。

解耦 rum 与控制器

之前在控制器中, 是将 *gin.Engine 作为控制器的嵌套字段的, 显然耦合太紧,不合适。 因此要想办法解决。

/classes/index.go , 在 Index 中, 删除了 *gin.Engine 的嵌套, 取而代之的是将 rum.RumBuild() 方法中从外部传入, 从而达到解耦的目的。

// Index
// 删除 e *gin.Engine , 删除强耦合关系
type Index struct {
    // e *gin.Engine
}

// Build 控制器的构造器, 创建路由信息
// 1. 通过传参 解耦控制器和 gin server 的关系
// 2. 通过实现 ClassController 接口关联与 rum
func (index *Index) Build(rum *rum.Rum) {
    rum.Handle("GET", "/", handlerIndex)
}

为了管理很多不同的控制器, rum 实现了 class_controller.go ClassController 接口

type ClassController interface {
    Build(rum *Rum)
}

只要满足该接口的对象,都能通过 Mount 方法实现路由注册。

// Mount 挂载控制器
// 1. 关联控制器与 rum
// 2. 返回 *Rum 是为了方便链式调用
func (rum *Rum) Mount(classes ...ClassController) *Rum {
    for _, class := range classes {

        // 将 rum 传入到控制器中
        class.Build(rum)
    }

    return rum
}

main.go 修改

现在就可以使用 rum 代替 gin 了。

func main() {

    // 1. 使用 rum 代替 gin
    g := rum.Default()

    // 2. 注册路由
    g.Mount(
        classes.NewIndex(),
    )

    // 3. 启动 rum server
    g.Launch()
}
相关文章
|
5天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
18 3
|
7天前
|
中间件 Go API
【Go 语言专栏】Go 语言中的 Web 框架比较与选择
【4月更文挑战第30天】本文对比了Go语言中的四个常见Web框架:功能全面的Beego、轻量级高性能的Gin、简洁高效的Echo,以及各自的性能、功能特性、社区支持。选择框架时需考虑项目需求、性能要求、团队经验和社区生态。开发者应根据具体情况进行权衡,以找到最适合的框架。
|
7天前
|
机器学习/深度学习 前端开发 数据可视化
数据分析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操作,以及如何优化数据库查询,以支持更高的并发用户数和更快的响应时间。