Gin控制器分离
Gin控制器分离
1 函数式
/*
apiRouters.GET("/", func(c *gin.Context) {
c.String(200, "我是一个api接口")
})
这样的一个路由注册我们发现,后面都跟了一个匿名函数,那我们将这个匿名函数全部取出来放在一个固定的地方就可以实现路由和业务逻辑的分离了
*/
1.1 将adminRouters.go中的业务逻辑全部取出
创建一个controllers文件夹,按照模块创建相应的文件夹以及文件,这些文件我们就用来存储相应的业务逻辑
admin.go 还需要加上函数名
package admin
import (
"github.com/gin-gonic/gin"
)
func AdminIndex(c *gin.Context) {
c.String(200, "后台首页")
}
func AdminUser(c *gin.Context) {
c.String(200, "用户列表")
}
func AdminUserAdd(c *gin.Context) {
c.String(200, "增加用户")
}
func AdminUserEdit(c *gin.Context) {
c.String(200, "修改用户")
}
func AdminNews(c *gin.Context) {
c.String(200, "新闻列表")
}
/* 将业务逻辑全部写在一起方便管理 */
adminRouter.go
/* 回到路由配置中 */
package routers
import (
"github.com/gin-gonic/gin"
"awesomeProject/gin/controllers/admin"
)
func AdminRoutersInit(r *gin.Engine) {
adminRouters := r.Group("/admin")
{
adminRouters.GET("/", admin.AdminIndex)
adminRouters.GET("/user", admin.AdminUser)
adminRouters.GET("/user/add", admin.AdminUserAdd)
adminRouters.GET("/user/edit", admin.AdminUserEdit)
adminRouters.GET("/article", admin.AdminNews)
}
}
/* 不需要加() 加()了的话就变成了执行函数了 */
2 结构体式
做法很简单,我们只需要将具体的业务逻辑写在结构体中就行了
api.go
package api
import "github.com/gin-gonic/gin"
type ApiController struct{}
func (con ApiController) Api(c *gin.Context) {
c.String(200, "我是一个api接口")
}
func (con ApiController) ApiUserList(c *gin.Context) {
c.String(200, "我是一个api接口userlist")
}
func (con ApiController) ApiPlist(c *gin.Context) {
c.String(200, "我是一个api接口plist")
}
func (con ApiController) ApiCart(c *gin.Context) {
c.String(200, "我是一个api接口cart")
}
apiRouters.go
package routers
import (
"awesomeProject/gin/controllers/api"
"github.com/gin-gonic/gin"
)
func ApiRoutersInit(r *gin.Engine) {
apiRouters := r.Group("/api")
{
apiRouters.GET("/", api.ApiController{}.Api)
apiRouters.GET("/userlist", api.ApiController{}.ApiUserList)
apiRouters.GET("/plist", api.ApiController{}.ApiPlist)
apiRouters.GET("/cart", api.ApiController{}.ApiCart)
}
}