• Gin 自定义控制器


    Gin 自定义控制器

    自定义控制器

    当我们的项目比较大的时候有必要对我们的控制器进行分组,采用 MVC 架构,在一些大型框架中控制器都是已经集了,如python 的 Django框架, 但是Gin 需要我们自定制 C 层, 控制器层。通过接口来实现。

    目录结构
    在这里插入图片描述

    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()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    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)
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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)
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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.lxx.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")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    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.lxx.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")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    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.lxx.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")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    控制器继承

    由于接口类型可以继承,因此我们可以通过该特性在自定制控制器的基础上, 实现控制器的继承,将一些公共方法放在 base_controller 文件中,提供给其它子接口使用

    目录结构

    在这里插入图片描述

    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,"商品失败")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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.lxx.top",
    	})
    }
    
    func (g GoodController)GoodlistHandler(c *gin.Context) {
    	g.Success(c) // 使用继承的方法
    }
    func (g GoodController)UpdategoodHandler(c *gin.Context) {
    	c.String(http.StatusOK, "updategoodHandler")
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    操作系统第一章王道习题_系统概述_总结易错知识点
    《rabbitMQ学习》一 rabbitMQ部署篇
    XPS的测试误差-科学指南针
    小程序canvas2D绘制印章,话不多说,直接上代码
    JS前端读取文件夹中文件(基于webpack)
    【opencv-c++】FastLineDetector快速线段检测器
    【网页期末作业】用HTML+CSS做一个漂亮简单的学校官网
    大数据的关键思考系列30:大数据与气候
    pycharm社区版创建Django项目的一种方式
    SpringThirdDay
  • 原文地址:https://blog.csdn.net/qq_55752792/article/details/126519458