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