8.Gin 自定义控制器

8.Gin 自定义控制器

前言

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

1fbb9d4b2b32754b82dc4f7bec282f92.png
1696385129126

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

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

自定义控制器

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

新增 controller/admin/AdminController.go

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

package adminimport ("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 routesimport ("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 defaultcontrollerimport ("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 adminimport ("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) {// 使用公共方法Successc.Success(context, "AdminList", nil)
}

测试接口

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

3fee4e9927a9dd24c50da64f732c2275.png
1696393064033

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

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

相关文章

使用Pytorch实现linear_regression

使用Pytorch实现线性回归 # import necessary packages import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt# Set necessary Hyper-parameters. input_size 1 output_size 1 num_epochs 60 learning_rate 0.001# Define a Toy datas…

操作系统 应用题 例题+参考答案(考研真题)

1.(考研真题)一个多道批处理系统中仅有P1和P2两个作业,P2比P1晚5ms到达,它们的计算和I/O操作顺序如下。 P1:计算60ms,I/O 80ms,计算20ms。 P2:计算120ms,I/O 40ms&…

<Linux>权限管理|权限分类|权限设置|权限掩码|粘滞位

文章目录 Linux权限的概念Linux权限管理a. 文件访问者的分类b. 文件类型和访问权限c. 文件权限表示方法d. 文件权限的设置权限掩码file指令粘滞位 权限总结权限作业 Linux权限的概念 Linux下有两种用户:超级用户(root)和普通用户。 超级用户:可以在Lin…

学生党的福利!移动云重磅升级存储产品体系

如今,随着科学技术不断发展进步,电子产品的生产技术也变得越来越成熟。一方面,电子产品的功能越来越强大,质量越来越可靠;另一方面,产品价格越来越便宜,在人们生活中越来越普及。大学生群体可以…

基于纳什博弈的多微网主体电热双层共享策略(matlab代码)

目录 ​1 主要内容 2 部分代码 3 程序结果 4 下载链接 ​1 主要内容 该程序复现《Multi-Micro-Grid Main Body Electric Heating Double-Layer Sharing Strategy Based on Nash Game》模型,主要做的是构建基于纳什博弈的多微网主体电热双层共享模型,…

java项目之木里风景文化管理平台(ssm+vue)

项目简介 木里风景文化管理平台实现了以下功能: 前台功能:用户进入系统可以实现首页,旅游公告,景区,景区商品,景区美食,旅游交通工具,红黑榜,个人中心,后台…

squid代理服务器(传统代理、透明代理、反向代理、ACL、日志分析)

一、Squid 代理服务器 (一)代理的工作机制 1、代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。 2、将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速…

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

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

Rust语言精讲:数据类型全解析

大家好!我是lincyang。 今天,我们将深入探讨Rust语言中的数据类型,这是理解和掌握Rust的基础。 Rust语言数据类型概览 Rust是静态类型语言,所有变量类型在编译时确定。Rust的数据类型分为两类:标量类型和复合类型。…

动态神经网络时间序列预测

大家好,我是带我去滑雪! 神经网络投照是否存在反锁与记忆可以分为静态神经网络与动态神经网络。动态神经网络是指神经网络带有反做与记忆功能,无论是局部反馈还是全局反锁。通过反馈与记忆,神经网络能将前一时刻的数据保留&#x…

【ARM AMBA AXI 入门 15 -- AXI-Lite 详细介绍】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 文章目录 AXI LiteAXI-Full 介绍AXI Stream 介绍AXI Lite 介绍AXI Full 与 AIX Lite 差异总结AXI Lite AMBA AXI4 规范中包含三种不同的协议接口,分别是: AXI4-FullAXI4-LiteAXI4-Stream 上图中的 AXI FULL 和 AIX-Lite 我们都把…

【GUI】-- 12 贪吃蛇小游戏之让小蛇动起来

GUI编程 04 贪吃蛇小游戏 4.3 第三步:让小蛇动起来(键盘控制) 首先,在构造器中要获取焦点事件、键盘监听事件并加入定时器(定时器定义需要实现ActionListener接口并重写actionPerformed方法): //构造器public GamePanel() {init();this.s…

jbase仪器接口设计

jbase的计划有借助虚拟M来实现连仪器,之前陆续写了些TCP逻辑,今天终于整理完成了仪器设计。首先用java的cs程序测试TCP的服务和客户端。 javafx的示例加强 package sample;import javafx.application.Application; import javafx.event.EventHandler; …

Web 自动化神器 TestCafe—页面基本操作篇

前 言 Testcafe是基于node.js的框架,以操作简洁著称,是web自动化的神器 今天主要给大家介绍一下testcafe这个框架和页面元素交互的方法。 一、互动要求 使用 TestCafe 与元素进行交互操作,元素需满足以下条件:☟ 元素在 body 页…

专访特斯拉工程师杨硕:跟着机器人上天入地、探索地外行星丨智源独家

导读 十几岁时,他痴迷《终结者》,曾在百科全书中窥见卡内基梅隆大学机械臂的介绍,从而得知了研究机器人「圣地」的存在。 在CMU,他深耕足式机器人感知定位算法,期待未来涉足太空,走上火星。 在大疆&#xf…

瑞格心理咨询系统设置多个管理员的操作方法

使用瑞格心理咨询系统,需要设置多个admin权限的管理员账号来管理,咨询厂家答复只能有1个管理员,个人觉得不可能,于是开始折腾。 解决办法: 在没有数据字典的情况下, 通过遍历数据库,发现用户信…

『 Linux 』使用fork函数创建进程与进程状态的查看

文章目录 🖥️ 前言 🖥️🖥️ 通过系统调用获取进程标识符 🖥️💻 进程标识符PID💻 父进程标识符PPID 🖥️ 通过系统调用创建子进程 fork() 🖥️💻 那么为什么在fork()函…

线程池简介及其简单实现

如果需要频繁的创建销毁线程, 就需要想办法降低创建和销毁的开销, 而线程池就是一个很好的选择: 提前创建好一些线程, 等到需要使用线程的时候, 直接从池子里拿一个就好了, 当不再使用该线程时, 就放回到池子里. 那么此时就从 创建/销毁线程 -> 池子里取线程/将线程还到池子…

构建智能医患沟通:陪诊小程序开发实战

在医疗科技的浪潮中,陪诊小程序的开发成为改善医患沟通的创新途径之一。本文将介绍如何使用Node.js和Express框架构建一个简单而强大的陪诊小程序,实现患者导诊和医生咨询功能。 1. 安装Node.js和Express 首先确保已安装Node.js,然后使用以…

Linux procps-ng - top

procps-ng 是一个开源的进程管理工具集,它提供了一系列用于监控和管理系统进程的命令行工具。它是 procps 工具集的一个分支,旨在改进和增强原有的 procps 工具。 procps-ng 包括了一些常用的命令行工具,例如: ps:用于…