# 自定义控制器 当我在写项目时,项目较大会造成代码冗余、繁杂、不宜看懂和后期维护,因此我们对控制器进行模块化分组。
## 控制器分组 一个较大的项目,一般可以分为后台管理、接口控制器、默认控制器等分组。项目的不同分类方法也不一样,应该按照实际。一般步骤
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, "增加管理员") }
当我们进行了对应的分组,所以路由也需要配置一下
go //对路由进行了分组 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中。 代码示例 go 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语言框架