Gin Framework 中 REST API 开发的文件夹结构和包命名约定

Folder structure and package naming convention for a REST API develop in Gin Framework

我是一名 NodeJS / PHP 开发人员,并且是 Go 的初学者。在做了一些研究之后,我为我的 REST API 项目提出了一个像这样的 MVC 风格的文件夹结构。

.
+- bin/
+- controllers/
   +- userController/
      +- userController.go
+- models/
   +- userModel/
      +- userModel.go
+- main.go

因此,我的代码可以是这样的:

import "github.com/gin-gonic/gin"
import "controllers/userController"

router := gin.Default()
router.GET("/user", userController.handleSomeLogicHere)

但是后来发现根据GoLang官网的说法,不建议使用驼峰式和蛇形式来打包。

我想知道在 Go 中使用 MVC 是否不是一个好习惯(因为我知道有人建议基于 module/dependency 的文件夹结构)?

或者我应该将所有控制器和模型更改为一个词,例如 usercontroller 或 userctrl(但对我来说似乎有点连线)?

我会稍微更改一下您的文件夹结构。我不想为每个控制器单独提供一个包,而是让它们成为 controllers 包的一部分(虽然我在谈论控制器,但同样的思路也适用于模型)。

.
+- bin/
+- controllers/
   +- user.go
+- models/
   +- user.go
+- main.go

为此,我还会稍微更改代码结构以像这样实例化控制器实例:

import "models"
import "controllers"
import "github.com/gin-gonic/gin"

userController := controllers.UserController{
    Users: models.UserModel{}, //DO your stuff here
}

router := gin.Default()
router.GET("/user", userController.GetUser)

您可以随心所欲地为每个控制器创建一个新包,但它很容易增长为大量包。通过将所有控制器放在一个包中,可以更轻松地使用它。

注意:随着应用的增长,可能需要创建子包。我能想到的一种情况是将所有仅限管理员的控制器放在 controllers/admin 包中。