10-Gin定义控制器
一 自定义控制器
当我们的项目比较大的时候有必要对我们的控制器进行分组,我们采用MVC架构,自定义C层controller,控制器
目录结构

main.go
package main
import (
"gin_test/routers"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
routers.LoadGoodsRouters(r)
routers.LoadOrderRouters(r)
routers.LoadUserRouters(r)
r.Run()
}
routers/goods.go
package routers
import (
"gin_test/controllers/good"
"github.com/gin-gonic/gin"
)
func LoadGoodsRouters(r *gin.Engine) {
r1 := r.Group("/good")
{
r1.GET("/", good.GoodController{}.GoodHandler)
r1.GET("/goodlist", good.GoodController{}.GoodlistHandler)
r1.GET("/updategood",good.GoodController{}.UpdategoodHandler)
}
}
routers/order.go
package routers
import (
"gin_test/controllers/order"
"github.com/gin-gonic/gin"
)
func LoadOrderRouters(r *gin.Engine) {
r1 := r.Group("/oOder")
{
r1.GET("/", order.OrderController{}.OrderHandler)
r1.GET("/orderlist", order.OrderController{}.OrderlistHandler)
r1.GET("/updateorder", order.OrderController{}.OpdateorderHandler)
}
}
routers/user.go
package routers
import (
"gin_test/controllers/user"
"github.com/gin-gonic/gin"
)
func LoadUserRouters(r *gin.Engine) {
r1 := r.Group("/user")
{
r1.GET("/", user.UserController{}.UserHandler)
r1.GET("/userlist", user.UserController{}.UserlistHandler)
r1.GET("/updateuser", user.UserController{}.UpdateuserHandler)
}
}
controllers/good/good_controller
package good
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义一个GoodController结构体
type GoodController struct {
}
// 把如下方法绑定给GoodController结构体
func (g GoodController)GoodHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"msg": "www.liuqingzheng.top",
})
}
func (g GoodController)GoodlistHandler(c *gin.Context) {
c.String(http.StatusOK, "goodlistHandler")
}
func (g GoodController)UpdategoodHandler(c *gin.Context) {
c.String(http.StatusOK, "updategoodHandler")
}
controllers/order/order_controller
package order
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义一个OrderController结构体
type OrderController struct {
}
// 把如下方法绑定给OrderController结构体
func (o OrderController)OrderHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"msg": "www.liuqingzheng.top",
})
}
func (o OrderController)OrderlistHandler(c *gin.Context) {
c.String(http.StatusOK, "orderlistHandler")
}
func (o OrderController)OpdateorderHandler(c *gin.Context) {
c.String(http.StatusOK, "updateorderHandler")
}
controllers/user/user_controller
package user
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义一个UserController结构体
type UserController struct {
}
// 把如下方法绑定给UserController结构体
func (u UserController)UserHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"msg": "www.liuqingzheng.top",
})
}
func (u UserController)UserlistHandler(c *gin.Context) {
c.String(http.StatusOK, "userlistHandler")
}
func (u UserController)UpdateuserHandler(c *gin.Context) {
c.String(http.StatusOK, "updateuserHandler")
}
二 控制器继承
目录结构

controllers/good/base_controller
package good
import "github.com/gin-gonic/gin"
type BaseController struct {
}
func (b BaseController)Success(c *gin.Context) {
c.String(200,"商品成功")
}
func (b BaseController)Error(c *gin.Context) {
c.String(200,"商品失败")
}
controllers/good/good_controller
package good
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 定义一个GoodController结构体
type GoodController struct {
BaseController // 继承BaseController
}
// 把如下方法绑定给GoodController结构体
func (g GoodController)GoodHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"msg": "www.liuqingzheng.top",
})
}
func (g GoodController)GoodlistHandler(c *gin.Context) {
g.Success(c) // 使用继承的方法
}
func (g GoodController)UpdategoodHandler(c *gin.Context) {
c.String(http.StatusOK, "updategoodHandler")
}
作者:liuqingzheng
出处:https://www.cnblogs.com/liuqingzheng/p/16124122.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人