GO语言-Gin 中自定义控制器

486 阅读2分钟

自定义控制器

当我在写项目时,项目较大会造成代码冗余、繁杂、不宜看懂和后期维护,因此我们对控制器进行模块化分组。

控制器分组

一个较大的项目,一般可以分为后台管理、接口控制器、默认控制器等分组。项目的不同分类方法也不一样,应该按照实际。一般步骤

  • 1、创建控制器文件夹(controller)
  • 2、在控制器文件夹中创造子文件夹(controller/admin/、controller/api、controller/default)
  • 3、将.go文件进行对应的分组

新建 controller/admin/BackUserController.go

package admin
import ( "net/http"
"github.com/gin-gonic/gin"
)
type BackUserController struct {
}
func (c BackUserController) Index(ctx *gin.Context) {
ctx.String(http.StatusOK, "后台首页")
}
func (c BackUserController) adminPage(ctx *gin.Context) {
ctx.String(http.StatusOK, "这是管理员首页")
}
func (c BackUserController) AddAdminPage(ctx *gin.Context) {
ctx.String(http.StatusOK, "增加管理员")
}

配置对应路由

当我们进行了对应的分组,所以路由也需要配置一下

//对路由进行了分组
adminRouter := router.Group("/admin")
//在GO语言中,首字母大写表示公开。admin表示文件夹
{
adminRouter.GET("/admin/user", admin.BackUserController{}.Index)
adminRouter.GET("/admin/add", admin.BackUserController{}.adminPage)
adminRouter.GET("/admin/index", admin.BackUserController{}.AddAdminPage)
}

其他路由的配置方法也是类似的

控制器的继承

为了降低代码的耦合性,减少代码量和代码冗余。 在GO语言中控制器继承是非常简单的,我们只需要将两个控制器结构体嵌套,就可以实现控制器的继承了。 比如 一个声明一个控制器A,控制器B当中有些方法可以使用到A中的方法,就可以将A放入B中。 代码示例

type A struct { }
//A中有判断成功可失败的两个方法
func (c A) Success(ctx *gin.Context) {
ctx.String(http.StatusOK, "成功")
}
func (c A) Error(ctx *gin.Context) {
ctx.String(http.StatusOK, "失败")
}
//将A结构体嵌套进B中
type B struct { 
        A 
    }
    //使用了A的方法
  func (c B) Index(ctx *gin.Context) {
        c.Success(ctx)
}      

由此可见,GO语言中,gin框架的自定义控制器简单又实用,学起来吧!!!!

本文正在参加技术专题18期-聊聊Go语言框架