自定义控制器
在对路由分组后,我们对控制器也可以进行分组
首先新建controllers
文件夹,然后在其中按业务逻辑创建控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| TEST │ go.mod │ go.sum │ main.go │ ├─controllers │ ├─admin │ │ adminController.go │ │ │ ├─api │ │ apiController.go │ │ │ └─homePage │ homePageController.go //因为default是关键字 │ └─routers adminRouters.go apiRouters.go defaultRouters.go
|
以/controllers/admin/adminController.go
为例,编辑控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| package admin
import "github.com/gin-gonic/gin"
type AdminController struct { }
func (c AdminController) Index(con *gin.Context) { con.String(200, "后台首页") }
func (c AdminController) User(con *gin.Context) { con.String(200, "设置用户") }
func (c AdminController) Article(con *gin.Context) { con.String(200, "新闻列表") }
|
再去到routers/adminRouters.go
中重新配置路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package routers
import ( "test/controllers/admin"
"github.com/gin-gonic/gin" )
func AdminRoutersInit(r *gin.Engine) { adminRouters := r.Group("/admin") { adminRouters.GET("/", admin.AdminController{}.Index) adminRouters.GET("/user", admin.AdminController{}.User) adminRouters.GET("/article", admin.AdminController{}.Article) } }
|
注意不是admin.AdminController{}.Index()
,这表示执行这个方法,而不是绑定到这个方法上
控制器的继承
上面之所以选择加一个结构体然后用它的方法,不是多此一举的,就是利用结构体的特性来继承父结构体的方法
这里定义两个全局的方法,用于返回成功和失败的消息
新建\controllers\admin\baseController.go
1 2 3 4 5 6 7 8 9 10 11 12 13
| package admin
import "github.com/gin-gonic/gin"
type BaseController struct { }
func (c BaseController) Success(con *gin.Context) { con.String(200, "成功") } func (c BaseController) Error(con *gin.Context) { con.String(200, "失败") }
|
再在adminController.go
中嵌套BaseController struct
,并继承和调用它的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package admin
import "github.com/gin-gonic/gin"
type AdminController struct { BaseController }
func (c AdminController) Index(con *gin.Context) { con.String(200, "后台首页") }
func (c AdminController) User(con *gin.Context) { c.Success(con) }
func (c AdminController) Article(con *gin.Context) { con.String(200, "新闻列表") }
|
可以看见控制器已经成功继承
