本文已参与「新人创作礼」活动,一起开启掘金创作之路。
接上:https://juejin.cn/post/7099435799468310536
1、Gin 路由文件 分组
如果路由都放在main.go中的话,项目很大的话就会非常的冗余,所以我们可以创建一个文件夹Routers。文件夹里面分别创建go文件用来创建路由,最后在main.go中引用。 按照习惯,我一般分为 后台管理路由、接口路由,默认路由三种。
1、新建后台管理路由 adminRoutes.go
```go package routes import ( "net/http" "github.com/gin-gonic/gin" )
func AdminRoutesInit(router *gin.Engine) { adminRouter := router.Group("/admin") //后台管理路由组 { adminRouter.GET("/index", func(c *gin.Context) { c.String(http.StatusOK, "主页") }) adminRouter.GET("/news", func(c *gin.Context) { c.String(http.StatusOK, "新闻") }) } } ``` 2、新建接口路由和默认路由和后台管理路由方法是一样的。
控制器分组
似乎对路由分组是显得没那么冗余了,但是如果控制器语句过于大而多或者项目很大的话,也只是减少了main.go的冗余,所以我们可以对控制器进行分组。
1、新建控制器文件夹。
我们之前对路由进行了分组,所以我们可以根据路由分组来创建控制器的分组。 可以分成后台管理控制器(controller/admin/.go)、接口控制器(controller/api/.go),默认控制器(controller/default/.go) 。这可以按照项目实际和个人习惯来分。 例: controller/admin/.go:
```go package admin import ( "net/http" "github.com/gin-gonic/gin" )
type NewsController struct {
} func (c NewsController) Index(c *gin.Context) { c.String(http.StatusOK, "后台首页") } ```
2、配置路由
我们把控制器分离了,就应该重新配置路由了
go package routes import ( "gin_demo/controller/admin" "net/http" "github.com/gin-gonic/gin" ) func AdminRoutesInit(router *gin.Engine) { adminRouter := router.Group("/admin") { adminRouter.GET("/user", admin.UserController{}.Index) adminRouter.GET("/user/add", admin.UserController{}.Add) adminRouter.GET("/news", admin.NewsController{}.Add) } }
发现了吗?我们只需把后面的方法替换成我们所在文件夹的控制器。
3、控制器的继承
我们使用了结构体来当接口编写控制器,因为结构体可以嵌套,那是不是控制器之间是可以继承的呢?
我们在上面 controller/admin/*.go:这段代码的结构体嵌套进TestController中:
go type TestController struct { NewsController }
这样就相当于TestController 继承了NewsController 就能使用NewsController里的方法了
比如: go package admin import ( "github.com/gin-gonic/gin" ) type NewsController struct { BaseController } func (a NewsController) Index1(c *gin.Context) { a.Index(c) }