Laravel to Go:我的旅程和 Fiber API 样板的创建

在 Laravel 中度过了四年多的沉浸式体验后,我对 MVC(模型-视图-控制器)架构非常熟悉。它的简单性和结构性使它使用起来非常愉快,而 Laravel 精心组织的文件夹可以帮助开发人员保持正轨。您始终知道将代码放在哪里,而广泛的内置工具(数据库连接、Redis、队列、迁移、ORM 等)使设置变得无缝。只需对您的环境进行一些调整,您的应用就可以使用了。

对我来说,Laravel 的 MVC 方法仍然是最强大的方法之一。**模型** 定义您的数据,**视图** 确定用户看到的内容,**控制器** 管理您的业务逻辑。它简单而结构化,Laravel 默认提供此设置,使其成为一个出色的开发框架。

但随着我的职业生涯的发展以及我跨行业和跨企业的工作,我意识到 Laravel 的 MVC 方法并不总是足够的,特别是对于复杂的应用程序而言。

扩展 Laravel 的 MVC 以增加复杂性

MVC 适用于简单的应用程序,但当逻辑变得更加复杂时,它就会显得力不从心。例如,当使用 Laravel 处理 API 时,**View** 层通常不会被使用。同时,将所有逻辑都放在控制器中会很快导致文件臃肿,难以维护。

为了解决这个问题,我通过引入 **Service** 和 **Repository** 层扩展了 Laravel 的 MVC 结构,创建了如下流程:

**控制器 → 服务 → 存储库 → 模型**

  • 控制器:处理验证并指导应用程序流程。
  • 服务:管理业务逻辑,分解为可重用的功能。
  • 存储库:管理数据库交互。
  • 模型:定义数据结构。
  • 这种分层方法使代码更易于维护和扩展。随着时间的推移,我逐渐习惯了这种结构,因此在其他项目中采用它感觉很自然。

    进入围棋界:一个全新的挑战

    当我开始使用 Go (Golang) 时,感觉就像踏入了未知领域。Go 与 PHP 完全不同,缺乏固有的文件夹结构。它也不是面向对象的语言,所以我不能简单地复制我从 Laravel 中了解到的内容。

    经过反复尝试,我决定坚持我熟悉的**CSRM**概念(控制器、服务、存储库、模型)。我将这个结构改编为 Go,尽管这需要一些创造性思维。此外,我还探索了可以简化开发的框架。我尝试了**Gin**和**Fiber**,最终选择了 Fiber,因为它的速度、现代功能和活跃的社区。

    我的 Fiber API 样板的诞生

    在使用 Go 和 Fiber 两年多之后,我决定创建一个样板来简化 API 开发。这不只是为了我自己——我也想帮助其他人快速建立他们的项目。

    结果:**Fiber API Boilerplate**。

    此样板专门用于 API,因此不包含视图渲染或模板引擎等功能。文件夹结构灵感来自:

  • Golang 项目布局标准
  • Ayoub Zulfiqar 的项目布局要点
  • 我还借鉴了 Laravel 的很多思想,例如 ORM、数据库连接、Redis、队列和身份验证。虽然它不如 Laravel 那么全面,但对于构​​建通用 API 来说已经足够了。

    样板的功能

    以下是样板目前提供的内容:

  • 身份验证:简化开箱即用的用户管理。
  • 错误报告:与 Sentry 集成。
  • 应用程序监控:使用 New Relic 获取实时洞察。
  • 热重载:包括 Air,以便更快地进行开发。
  • 静态代码检查:使用 GolangCI-Lint。
  • API 文档:通过 Swag 内置 Swagger 支持。
  • 依赖注入:由 Google Wire 提供支持。
  • 部署:配备Docker和Supervisor,可实现无缝部署。
  • 该存储库还包括示例代码和详细的**README**,以指导您了解每个文件夹和功能。

    建设未来

    虽然样板已经可以运行,但我计划通过添加迁移、事件监听器和命令等工具来进一步扩展它。这是一个不断发展的项目,旨在与用户一起成长。

    欢迎您探索和使用样板。您可以随意自定义它 - 添加您喜欢的工具或删除您不需要的工具。如果您有建议或功能请求,请创建问题或提交拉取请求。

    立即开始

    查看**Fiber API Boilerplate**并试用一下。我希望它能像我一样简化您的 Go API 开发之旅。让我们一起创造一些令人惊叹的东西吧!