【Golang】 在 Gin 框架中添加网关中间件

在 Gin 框架中添加网关中间件是一种常见的做法,可以用于实现请求的预处理、身份验证、日志记录等功能。下面是一个简单的示例,演示如何在 Gin 框架中添加一个简单的网关中间件。

package mainimport ("fmt""net/http""time""github.com/gin-gonic/gin"
)// 网关中间件
func GatewayMiddleware() gin.HandlerFunc {return func(c *gin.Context) {// 在这里可以进行各种预处理操作,比如身份验证、日志记录等// 记录请求开始时间start := time.Now()// 执行下一个中间件或者处理器c.Next()// 记录请求结束时间end := time.Now()latency := end.Sub(start)// 打印请求信息fmt.Printf("[%s] %s %s %s %d %v\n",end.Format("2006-01-02 15:04:05"),c.Request.Method,c.Request.URL.Path,c.ClientIP(),c.Writer.Status(),latency,)}
}func main() {// 创建一个 Gin 引擎r := gin.Default()// 添加网关中间件r.Use(GatewayMiddleware())// 定义一个简单的路由r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong"})})// 启动服务if err := r.Run(":8080"); err != nil {fmt.Println("Server startup failed:", err)}
}

在上面的示例中,我们首先定义了一个 GatewayMiddleware 函数,它返回一个 gin.HandlerFunc 类型的函数,这个函数就是我们的网关中间件。在这个中间件中,我们可以进行一些预处理操作,比如记录请求开始时间、身份验证等。然后,我们通过 r.Use() 方法将这个中间件添加到 Gin 引擎中。

接着,我们定义了一个简单的路由 /ping,当客户端发送 GET 请求到 /ping 路径时,会返回一个 JSON 格式的响应。在这个路由处理函数中,我们并没有进行任何额外的操作,但是由于我们已经在引擎中添加了网关中间件,所以这个请求也会经过网关中间件的处理。

最后,我们通过 r.Run(":8080") 启动了一个 HTTP 服务,监听在 8080 端口上。当有请求到达时,Gin 框架会自动调用注册的路由处理函数,并经过添加的中间件处理。

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

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

相关文章

什么是分库分表

读写分离主要应对的是数据库读并发,没有解决数据库存储问题。试想一下:如果 MySQL 一张表的数据量过大怎么办? 答案当然是分库分表 什么是分库? 分库 就是将数据库中的数据分散到不同的数据库上,可以垂直分库,也可…

windows通过sftp对Linux服务器进行上传下载

前言 通过简单高效的方式可以在没有远程连接软件的情况下对服务器进行上传下载。 方法 Windows下打开cmd命令行,输入sftp 用户名IP 上传下载命令 #上传文件,如果需要上传文件夹则 put -r 文件路径 上传到路径 sftp> put E:\clash-verge_1.6.2_a…

把3D模型加载到网页上需要什么技术?

要将3D模型加载到网页上并实现交互展示需求(比如点击模型弹出一个窗口或控制模型的材质等),可以使用以下几种技术: 1、Three.js:这是一个非常流行的JavaScript库,用于在网页上渲染和显示3D图形。它支持多种…

基于svm的水果识别

1、程序界面介绍 该程序GUI界面包括待检测水果图片加载、检测结果输出、清空可视化框等。其中包括训练模型、加载图片、重置、识别检测按钮。 程序GUI界面 识别玉米识别西瓜 分类器识别水果基本原理: 由于每种水果的外形存在很大差异,比如西瓜与玉米&…

Hive-表设计优化

Hive-表设计优化 1.Hive查询基本原理 Hive的设计思想是通过元数据解析描述将HDFS上的文件映射成表。 基本的查询原理是当用户通过HQL语句对Hive中的表进行复杂数据处理和计算时,默认将其转换为分布式计算MapReduce程序对HDFS中的数据进行读取处理的过程。 当执行…

Nsight System无法使用collect GPU metrics

Nsight System无法使用“collect GPU metrics” 这里简单记录下Nsight System安装使用中发生的权限问题,主要针对的是collect GPU metrics无法使用的问题 原因分析: 根据英伟达官方文档的解释应该是GPU的权限问题,官方解决问题方法在此 解…

软件设计师笔记(二)-零碎要点

本文内容来自笔者学习zst 留下的笔记,都是零碎的要点,查缺补漏,若有错误请大家提出,希望大家都能通过,记得加上免费的关注!谢谢! 文章编辑于:2024-5-13 13:42:56 目录 1. 算法 [广…

【什么是范数】L1、L2范数介绍

一、 什么是范数 范数(Norm)是数学中用于衡量向量大小(或距离)的一种概念。在几何和代数中,范数可以提供一个向量长度或大小的量度。更正式地说,范数是一个函数,它将向量的集合映射到非负实数,满足以下性质…

社交媒体数据恢复:陌陌

确保你的手机已经进行了备份。备份可以提高数据恢复的成功率。 在电脑上下载并安装数据恢复软件。在使用软件进行恢复之前,请确保你的安卓手机已经在开发者选项中开启了USB调试模式。 使用USB数据线将手机连接至电脑。打开数据恢复软件,选择“陌陌聊天…

毕业论文写作神器:使用Latex写论文 安装texlive+texstudio 并添加IEEE模板

听说Latex写论文方便,更改格式方便,而且颜值高 LexLive2024安装 清华镜像网址:Index of /CTAN/systems/texlive/Images/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载完双击打开texlive2024.iso,然后点击 修改路径&#xf…

稻盛和夫《活法》读后感

最近几天又重读了一边稻盛和夫的《活法》,里面的观点让我感触颇多,现分享给诸君。 稻盛和夫毕业后,适逢经济萧条,没有好机会进入大公司深造,只能在一名教授的推荐下进入了一家做陶瓷绝缘体的公司,虽然公司…

Arduino-ILI9341驱动实现TFT屏输出中文四

Arduino-ILI9341驱动实现TFT屏输出中文四 1.概述 ILI9341驱动在TFT屏幕上不支持直接输出汉字,需要借助提取字模软件将汉字转为十六进制地址,然后通过改地址控制每行和每列点阵的亮和灭实现显示汉字功能。 2.ILI9341显示汉字 2.1.PCtoLCD2002取模软件…

面试宝典(2)——缓存篇(Redis)

面试宝典(2)——缓存篇(Redis) 1.Redis的主要用途有哪些? 缓存分布式锁:setnx,redisson消息队列,延迟队列 2.什么是缓存穿透? 查询一个不存在的数据,数据…

C++入门指南(中)

目录 ​编辑 一、C关键字(C98) 二、命名空间 2.1 域 2.2 命名空间域 2.1 命名空间定义 2.2 命名空间使用 三、C输入&输出 四、缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 五、函数重载 5.1 函数重载概念 5.2 C支持函数重载的原理--名字修饰(name Mangling)…

告别黑板粉笔 高新技术进课堂 未来教室会成什么

现在,全国许多院校都经过引进信息化技能,完成智慧校园建造,推进教育均衡展开。一些校园的小学教室的信息化配备投入经费已达50万元/每间,初中是70万元,高中是90万元。这些新技能的投入运用有用的共享教育内容、精准地分…

基于select for update 实现数据库分布式锁

1、select for update 的基本语法 SELECT * FROM table_name WHERE condition FOR UPDATE;2、select for update 的定义及作用 2.1 、select for update的含义是在查询数据的同时对所选的数据行进行锁定,以保证数据的一致性和并发控制。在并发环境下,多…

ES6 笔记02

目录 01 对象的扩展 02 链判断运算符 03 属性名表达式 04 Symbol 类型 05 set集合的使用 06 Map集合的使用 07 Set集合和Map集合的遍历方式 08 iterator迭代器 01 对象的扩展 对象的属性和方法的简洁表示: es6允许在字面量对象里面直接写变量名 let 变量名变量值; let …

金融业开源软件应用 评估规范

金融业开源软件应用 评估规范 1 范围 本文件规定了金融机构在应用开源软件时的评估要求,对开源软件的引入、维护和退出提出了实现 要求、评估方法和判定准则。 本文件适用于金融机构对应用的开源软件进行评估。 2 规范性引用文件 下列文件中的内容通过文中的规范…

WS2811 单线 256 级灰度三通道恒流 LED 驱动器芯片 IC

产品概述 WS2811 是三通道LED驱动控制专用电路,芯片内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和15V高压可编程定电流输出驱动器。同时,为了降低电源纹波,3个通道有一定的延时导通功…

【数据结构课程学习】:队列学习

🎁个人主页:我们的五年 🔍系列专栏:数据结构课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🚗 1.队列的基本概念&#xff1a…