Go 在Gin框架中开发的RESTAPI的文件夹结构和包命名约定

Go 在Gin框架中开发的RESTAPI的文件夹结构和包命名约定,go,go-gin,Go,Go Gin,我是一名NodeJS/PHP开发人员,也是使用Go的初学者。在做了一些研究之后,我为我的RESTAPI项目提出了一个类似于这样的MVC风格的文件夹结构 . +- bin/ +- controllers/ +- userController/ +- userController.go +- models/ +- userModel/ +- userModel.go +- main.go 因此,我的代码可以如下所示: import "github.co

我是一名NodeJS/PHP开发人员,也是使用Go的初学者。在做了一些研究之后,我为我的RESTAPI项目提出了一个类似于这样的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(但对我来说似乎有点像有线)?

我会稍微改变一下你的文件夹结构。与其为每个控制器提供一个单独的包,不如让它们成为
控制器
包的一部分(当我谈论控制器时,同样的思路适用于模型)

为此,我还将稍微更改代码结构以实例化控制器实例,如下所示:

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
包中

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)