Gone框架模块化改造之路

🚀 发现 gone-io/gone:一个优雅的 Go 依赖注入框架!💻 它让您的代码更简洁、更易测试。🔍 框架轻量却功能强大,完美平衡了灵活性与易用性。⭐ 如果您喜欢这个项目,请给我们点个星!🌟 您的支持是我们前进的动力!🤝 欢迎贡献代码或提出建议,一起让 gone 变得更好!👨‍💻 #golang #依赖注入 #开源 👉github.com/gone-io/gone
本文原地址:https://github.com/gone-io/goner/blob/main/docs/modules_update.md

一、改造背景

1. Gone框架的定位

Gone框架是一个轻量级的依赖注入框架,它通过简洁的API和注解式依赖声明,帮助开发者轻松构建模块化、可测试的应用程序。作为一个轻量级框架,Gone坚持"小而美"的设计理念,只提供必要的核心功能,避免过度臃肿。

2. 可插拔组件的设计

Gone框架提供了一系列可插拔的组件(称为Goner),涵盖了Web开发、数据库访问、配置管理、日志记录等多个方面:

  • gin:Web框架集成
  • gorm:ORM框架集成
  • viper:配置管理
  • redis:缓存服务
  • grpc:RPC服务
  • apollo/nacos:配置中心
  • zap:日志组件
  • 等等

这种设计让开发者可以根据实际需求选择所需组件,实现灵活组合,避免了"全家桶"式的强制依赖。

3. 原有架构的问题

改造前,Gone核心代码和所有Goner组件都在同一个仓库中管理,共享同一个Go module。这种架构存在以下问题:

  • 依赖膨胀:用户即使只需要某一个特定功能(如gin集成),也必须导入整个Gone模块,包含大量不需要的依赖
  • 版本管理困难:所有组件共享同一个版本号,无法针对单个组件进行独立版本迭代
  • 维护成本高:随着组件数量增加,单一仓库的维护难度急剧上升
  • 违背轻量级理念:过多的依赖与Gone框架轻量级的设计理念相矛盾

二、改造过程

1. 仓库分离

首先,我们将Goner组件库从原始的github.com/gone-io/gone仓库中分离出来,独立为一个新仓库:github.com/gone-io/goner

这一步骤包括:

  • 创建新的Git仓库
  • 迁移相关代码,保留提交历史
  • 调整导入路径

2. 单仓库多模块(Mono Repo)改造

github.com/gone-io/goner进行Mono Repo改造,将每个Goner组件作为独立的子模块管理:

github.com/gone-io/goner/
├── g/                  # 基础接口定义
├── gin/                # Gin框架集成
├── gorm/               # GORM框架集成
├── redis/              # Redis客户端集成
├── viper/              # Viper配置管理
├── apollo/             # Apollo配置中心
├── nacos/              # Nacos配置中心
├── zap/                # Zap日志组件
├── grpc/               # gRPC服务集成
├── cmux/               # 连接复用
├── schedule/           # 定时任务
├── tracer/             # 链路追踪
├── urllib/             # HTTP客户端
├── xorm/               # XORM框架集成
└── ...

每个子目录都是一个独立的Go模块,拥有自己的go.mod文件,可以独立版本化和发布。

3. 接口抽象与依赖解耦

为了解决组件间的相互依赖问题,我们采用了"依赖接口,不依赖实现"的设计原则:

  • 创建github.com/gone-io/goner/g子模块,用于定义所有公共接口
  • 所有组件都依赖于这个基础接口模块,而不是直接依赖其他组件
  • 通过接口抽象,实现了组件间的松耦合

例如,在g/tracer.go中定义了链路追踪相关接口,而不是直接依赖于tracer的具体实现:

// /g/tracer.go
package g

// Tracer 用于日志追踪,为同一调用链分配统一的traceId,方便日志追踪
type Tracer interface {
   
   

    //SetTraceId 为调用函数设置traceId。如果traceId为空字符串,将自动生成一个。
    //调用函数可以通过GetTraceId()方法获取traceId。
    SetTraceId(traceId string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dapeng-大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值