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

时间:2019-07-14 03:58:09

标签: go gin-gonic

我是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是否不是一个好习惯(因为我知道有人建议基于模块/依赖关系的文件夹结构)?

还是我应该将所有控制器和模型都更改为一个单词,例如usercontroller或userctrl(但似乎有点与我联系)?

1 个答案:

答案 0 :(得分:1)

我会稍微更改您的文件夹结构。与其为每个控制器提供一个单独的程序包,不如让它们成为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{}, //DI your stuff here
}

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

您可以按照自己的意愿去做,为每个控制器创建一个新的程序包,但是它很容易成长为大量的程序包。通过将所有控制器都放在一个软件包中,可以更轻松地使用它。

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