静态文件服务和路由详解2

277 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

接上:juejin.cn/post/709943…

1、Gin 路由文件 分组

如果路由都放在main.go中的话,项目很大的话就会非常的冗余,所以我们可以创建一个文件夹Routers。文件夹里面分别创建go文件用来创建路由,最后在main.go中引用。 按照习惯,我一般分为 后台管理路由、接口路由,默认路由三种。

1、新建后台管理路由 adminRoutes.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:

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、配置路由

我们把控制器分离了,就应该重新配置路由了

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

type  TestController struct {
      NewsController
}

这样就相当于TestController 继承了NewsController 就能使用NewsController里的方法了

比如:

package admin
import ( "github.com/gin-gonic/gin"
)
type NewsController struct {
    BaseController
}
func (a NewsController) Index1(c *gin.Context) {
  a.Index(c)
}