我是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(但似乎有点与我联系)?
答案 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
包中。