用 Go 写一个“更像 Spring,但不像 Java”的 Web 框架

9 阅读2分钟

在 Go 生态里,Web 框架的选择通常偏向轻量,但很多开发者在项目成长过程中,会自然地追求更清晰的结构与更高的可维护性。尤其是熟悉 Spring Framework 的开发者,会希望在 Go 中也能拥有类似的工程能力。

基于这个目标,我做了这个项目:
👉 github.com/chuccp/go-w…


一、核心优势:架构能力 + Go 风格

这个框架的核心不是“多功能”,而是:

在不破坏 Go 简洁性的前提下,引入工程化能力


二、统一入口:Builder 模式

builder := wf.NewBuilder(config.LoadAutoConfig())
builder.Get("/", handler)
app := builder.Build()
app.Run(ctx)

优势:

  • 启动流程清晰
  • 配置集中管理
  • 易于扩展与组合

👉 类似 Spring Boot,但更轻量、更直接


三、内建生命周期与依赖管理

Init(ctx)

所有组件统一初始化,支持:

  • Model(数据层)
  • Service(业务层)
  • Filter(中间件)
  • Runner(后台任务)

优势:

  • 生命周期统一管理
  • 依赖关系清晰
  • 避免随意实例化带来的混乱

四、清晰分层结构(自然形成)

Controller → Service → Model

优势:

  • 业务逻辑与请求处理分离
  • 数据访问与业务逻辑解耦
  • 项目结构更清晰、可维护

五、声明式路由策略(核心亮点)

ctx.Get("/api/profile", handler).
    WithMeta(RequireAuth(), RequirePermission("user"))

优势:

  • 策略与业务代码解耦
  • 每个路由可独立配置
  • 逻辑更清晰、更可读

👉 实现类似 Spring AOP 的能力,但用 Go 的方式表达


六、扩展优先的设计理念

框架不追求“内置一切”,而是提供清晰的扩展体系:

  • Filter(请求处理链)
  • Component(通用组件)
  • Model(数据访问)
  • Runner(后台任务)
  • Meta(策略系统)

优势:

  • 灵活扩展
  • 易于定制
  • 避免功能臃肿

七、横切能力统一入口(Meta)

.WithMeta(
    RequireAuth(),
    RequirePermission("admin"),
)

优势:

  • 权限、限流等统一表达方式
  • 不侵入业务代码
  • 支持组合与扩展

👉 可以构建完整的策略系统(Policy System)


八、开发体验优势

  • 写法符合 Go 习惯(无注解、低反射)
  • 结构清晰,易于理解
  • 组件化设计,复用性强
  • 适合 AI 辅助开发(结构明确)

九、适用场景

特别适合:

  • 中小团队项目
  • RESTful API 服务
  • 管理后台 / CRUD 系统
  • 需要清晰架构的 Go 项目

十、设计理念总结

这个框架的核心不是“模仿”,而是:

用 Go 的方式,表达工程化能力


🔗 项目地址

👉 github.com/chuccp/go-w…

如果你在找一个既保持 Go 简洁性,又具备工程能力的框架,这个项目值得一试。