8.Gin 自定义控制器

news2024/11/16 7:30:39

8.Gin 自定义控制器

前言

在上一篇路由文件抽离的过程中,我们发现接口的业务逻辑还写在路由配置中,如下:

1fbb9d4b2b32754b82dc4f7bec282f92.png
1696385129126

但是如果业务逻辑比较多,如果写在路由之中,肯定不合适。

我们可以将业务逻辑抽离,单独再写一个Controller的模块。

自定义控制器

下面我们自定义一个 AdminController 模块来作为示例。

新增 controller/admin/AdminController.go

新增  AdminController 模块,主要用于实现接口的业务逻辑。06f12b16943c6674dd8d4218003a874a.png

package admin

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

// AdminController 定义AdminController
type AdminController struct {
}

// Index 定义AdminController的首页
func (c AdminController) Index(context *gin.Context) {
    context.HTML(http.StatusOK, "admin/index.html", gin.H{"title": "admin前台首页"})
}

func (c AdminController) AdminList(context *gin.Context) {
    context.JSON(http.StatusOK, gin.H{
       "message": "AdminList",
    })
}

func (c AdminController) AddAdmin(context *gin.Context) {
    context.JSON(http.StatusOK, gin.H{
       "message": "AddAdmin",
    })
}

func (c AdminController) UpdateAdmin(context *gin.Context) {
    context.JSON(http.StatusOK, gin.H{
       "message": "UpdateAdmin",
    })
}

func (c AdminController) DeleteAdmin(context *gin.Context) {
    context.JSON(http.StatusOK, gin.H{
       "message": "DeleteAdmin",
    })
}

配置路由

5e38759322ac641445e24c8d8c672f1f.png
1696392231927
package routes

import (
    "github.com/gin-gonic/gin"
    "go-gin-pratice/controller/admin"
)

// AdminRouterInit Admin路由分组
func AdminRouterInit(r *gin.Engine) {
    // 设置admin路由
    adminRouter := r.Group("admin")
    {
       adminRouter.GET("index", admin.AdminController{}.Index)
       adminRouter.GET("list", admin.AdminController{}.AdminList)
       adminRouter.POST("add", admin.AdminController{}.AddAdmin)
       adminRouter.PUT("update", admin.AdminController{}.UpdateAdmin)
       adminRouter.DELETE("delete", admin.AdminController{}.DeleteAdmin)

       adminRouter.GET("goods", admin.GoodsController{}.Goods)
    }
}

在这里主要就是使用 admin.AdminController{}.Index 来替代原来的函数逻辑。

测试接口

访问 {{LocalUrl}}:8000/admin/list

27d6c5b825ad2f96805b9d1ce5c83c8f.png
1696392307058

访问 {{LocalUrl}}:8000/admin/add

1b7402487ac75a8b38fead53c9ffdbe0.png
1696392349458

经过测试,接口访问都是正常的。

控制器的继承

如果控制器有多个,并且有些公共方法需要实现,那么这时候我们可以写一个公共的控制器 BaseController,然后其他 Controller 继承即可。

新建controller/base/BaseController.go

新增公共控制器,编写公共方法:

  • 成功的结果返回

  • 失败的结果返回

ed7ea3ab1306ef39d114232ab3335300.png
1696392950440
package defaultcontroller

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

// BaseController 定义公共控制器
type BaseController struct {
}

// Success 成功的结果返回
func (c BaseController) Success(context *gin.Context, msg string, data any) {
    context.JSON(http.StatusOK, gin.H{
       "message": msg,
       "data":    data,
    })
}

// 失败的结果返回
func (c BaseController) Error(context *gin.Context, err error) {
    context.JSON(http.StatusBadRequest, gin.H{
       "error": err.Error(),
    })
}

继承 BaseController,并使用公共方法

ec020c38403b7aef2c10d975e878794f.png
1696393029568
package admin

import (
    "github.com/gin-gonic/gin"
    defaultcontroller "go-gin-pratice/controller/base"
    "net/http"
)

// AdminController 定义AdminController
type AdminController struct {
    // 继承公共控制器
    defaultcontroller.BaseController
}

func (c AdminController) AdminList(context *gin.Context) {
    // 使用公共方法Success
    c.Success(context, "AdminList", nil)
}

测试接口

访问 {{LocalUrl}}:8000/admin/list

3fee4e9927a9dd24c50da64f732c2275.png
1696393064033

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1236375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++进阶之路】第八篇:智能指针

文章目录 一、为什么需要智能指针?二、内存泄漏1.什么是内存泄漏,内存泄漏的危害2.内存泄漏分类(了解)3.如何检测内存泄漏(了解)4.如何避免内存泄漏 三、智能指针的使用及原理1.RAII2.智能指针的原理3.std:…

【兔子王赠书第8期】AI短视频制作一本通: 文本生成视频+图片生成视频+视频生成视频

文章目录 写在前面推荐图书关键点内容简介作者简介推荐理由写在后面 写在前面 1本书精通AI短视频制作,文本生成视频图片生成视频视频生成视频AI短视频应用!高效视频制作技巧,助你快速成长为行业大咖! 推荐图书 《AI短视频制作一…

Stable Diffusion XL网络结构-超详细原创

强烈推荐先看本人的这篇 Stable Diffusion1.5网络结构-超详细原创-CSDN博客 1 Unet 1.1 详细整体结构 1.2 缩小版整体结构 以生成图像1024x1024为例,与SD1.5的3个CrossAttnDownBlock2D和CrossAttnUpBlock2D相比,SDXL只有2个,但SDXL的Cros…

springboot集成nacos作配置中心,动态配置不生效

总体概要 springboot3.0,nacos,jdk17使用nacos配置中心,热更新,使配置动态生效 本文主要介绍springboot怎么集成nacos作为配置中心,使其配置在不重启服务的情况下,怎么生效的。 所用组件及其版本 组件版本…

【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)

本案例讲解矢量数据几何校正,根据一个矢量数据去校正另外一个矢量数据。 文章目录 一、加载实验数据二、空间校正三、注意事项 一、加载实验数据 在ArcGIS Pro中加载数据效果如下: design:需要校正的数据图层planroadcenter:目标…

118.184.158.111德迅云安全浅谈如何避免网络钓鱼攻击

随着互联网的不断发展,网络钓鱼攻击也越来越猖獗,给个人和企业带来了巨大的经济损失和安全威胁。本文对如何防范网络钓鱼攻击提出的一些小建议 希望对大家有所帮助。 1.防止XSS(跨站脚本攻击)攻击 XSS攻击指的是攻击者在网站中注入…

每日一练:组合不重复的四位数字

问题:有四个数字“1、2、3、4”,能组成多少个互不相同且无重复数字的四位数?各是多少? 程序分析 可填在千位、百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 实现方法1 1)使用四…

909-2014-T1

文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 为带表头的单链表类Chain编写一个成员函数Reverse,该函数对链表进行逆序操作(将链表中的结点按与原序相反的顺序连接),要求逆序操作就地进行,不分配…

Linux学习第44天:Linux 多点电容触摸屏实验:难忘记第一次牵你手的温存

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章的思维导图内容如下: 二、硬件原理图分析 三、实验程序编写 1、修改设备树 1)、添加FT5426所使用的IO 一个复位 IO、一个中断 IO、…

【C++进阶之路】第五篇:哈希

文章目录 一、unordered系列关联式容器1.unordered_map(1)unordered_map的介绍(2)unordered_map的接口说明 2. unordered_set3.性能对比 二、底层结构1.哈希概念2.哈希冲突3.哈希函数4.哈希冲突解决(1)闭散…

【Python3】【力扣题】338. 比特位计数

【力扣题】题目描述: 题解:从0到n的整数,逐一统计二进制中1的个数,记录在一个新列表中。 【Python3】代码: 1、解题思路:Python函数。 知识点:bin(...):转为二进制字符串&#xff…

秋招JAVA面经总结

面试的范围是Java基础+Java并发+Java框架+mysql+网络。 Java基础 重载与重写有什么区别? 重载(Overloading)指的是在同一个类中,可以有多个同名方法,它们具有不同的参数列表(参数类型、参数个数或参数顺序不同),编译器根据调用时的参数类型来决定调用哪个方法。 重写…

用VS编译ROS包

扩展安装 在扩展中搜索并安装ROS、C、python、CMake和CMake Tools。 打开工作空间 文件→打开文件夹 新建功能包 右键src文件夹,选择新建功能包(通常是最后一条命令) 编译 如果需要新建终端的话,就点击下图中的加号 创建la…

Java,数据结构与集合源码,数据结构概述

目录 数据结构概念: 数据结构的研究对象: 研究对象一,数据间逻辑关系: 研究对象二,数据的存储结构(或物理结构): 研究对象三:运算结构 数据结构的相关介绍&#xff…

泵类设备常见的5种故障及监测方法

在各种工业领域中,泵是一种关键设备,用于输送液体或气体。然而,泵类设备常常会面临各种故障,这可能导致生产停顿和生产效率下降。为了及时监测并解决这些故障,设备状态监测系统成为一种重要的工具。本文将介绍泵类设备…

CSDN专栏设置

文章目录 一、规则1.1、专栏数量与等级关联1.2、等级与积分关联1.3、积分1.3.1、积分获取1.3.2、积分被扣 二、配置2.1、入口2.2、新建2.2.1、一级专栏2.2.2、二级专栏 2.3、快捷编辑2.4、拖拽 一、规则 写了一阵子CSDN博客后,发现自己新增专栏的时候提示不能再新增…

kubeadm join 192.168.10.16:6443 --token xxx报错Failed to request cluster-info

1、node节点执行 kubeadm join 192.168.10.16:6443 --token hak4zi.hrib9uv4p62t1uok --discovery-token-ca-cert-hash sha256:4337638eef783ee6a66045ad699722079e071c2dfbaa21e37d3174f04d58ea97 --v2 报错 [discovery] Failed to request cluster-info, will try again: G…

华为云cce中环境变量的使用

如上图,cce中的环境变量可配置。 配置后的这些参数怎么用呢? 我们可以在docker打包前在springboot的配置文件中配置,cce在启动的时候会调用环境变量中的设置。 如上图,配置的东西以key值标记,冒号后面的是默认配置项…

编译器安全

在供应链安全中,大家一直关注采用SCA工具分析开源组件中的安全漏洞以及许可证的合规性。但是对于底层软件开发使用的编译器、链接器等安全却容易被忽视,其中有没有安全漏洞、有没有运行时缺陷、有没有被植入漏洞、木马等,似乎并没有引起多少人…

想面试前端工程师,必须掌握哪些知识和技能?【云驻共创】

在当今的数字化时代,前端工程师扮演着至关重要的角色。他们负责设计和开发用户界面,使得用户能够与应用程序或网站进行互动。为了找到最出色的前端工程师,你需要了解哪些技能和知识是必备的,同时也要掌握一些面试技巧和常见的面试…