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
包中。
我是一名 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
包中。