Go中gin框架的*gin.Context参数常见实用方法

梗概:

*gin.Context是处理HTTP请求的核心。ctx代表"context"(上下文),它包含了处理请求所需的所有信息和方法,例如请求数据、响应构建器、路由参数等。

基本的格式:

func SomeHandler(ctx *gin.Context) {// 使用ctx来处理请求和构建响应
}

常见的使用:

1. 读取查询参数

从请求中读取查询字符串参数。

func ReadQueryParams(ctx *gin.Context) {value := ctx.Query("someParam") // 获取查询参数ctx.JSON(http.StatusOK, gin.H{"someParam": value, // 回显参数})
}

2. 读取POST表单数据

对于POST请求中发送的表单数据的访问

func ReadPostForm(ctx *gin.Context) {value := ctx.PostForm("somePostParam") // 获取POST表单参数ctx.JSON(http.StatusOK, gin.H{"somePostParam": value,})
}

3. 读取JSON请求体

如果请求有JSON体,将其绑定到一个结构体。

type RequestBody struct {Message string `json:"message"`
}func ReadJSONBody(ctx *gin.Context) {var body RequestBodyif err := ctx.BindJSON(&body); err != nil {ctx.JSON(http.StatusBadRequest, gin.H{"error": "Invalid JSON"}) // 绑定JSON失败return}ctx.JSON(http.StatusOK, gin.H{"message": body.Message,})
}

4. 写入JSON响应

向客户端写入JSON响应。

func WriteJSONResponse(ctx *gin.Context) {ctx.JSON(http.StatusOK, gin.H{"status": "success","data": "some data",})
}

5. 流式响应

对于大型响应,您可以向客户端流式传输数据。

func StreamResponse(ctx *gin.Context) {for i := 0; i < 10; i++ {ctx.SSEvent("message", gin.H{"data": "Streaming " + strconv.Itoa(i)})time.Sleep(1 * time.Second)}
}

6. 访问路由参数

可以使用Param方法访问路由参数。

func RouteParameter(ctx *gin.Context) {productID := ctx.Param("id") // 获取路由参数ctx.JSON(http.StatusOK, gin.H{"product_id": productID,})
}

7. 设置Cookies

您可以设置和获取cookies。

func CookieExample(ctx *gin.Context) {ctx.SetCookie("username", "user1", 3600, "/", "localhost", false, true) // 设置cookieusername := ctx.GetCookie("username") // 获取cookiectx.JSON(http.StatusOK, gin.H{"cookie_username": username,})
}

8. 错误处理

您可以处理错误并返回适当的响应。

func ErrorHandling(ctx *gin.Context) {if someCondition {ctx.JSON(http.StatusBadRequest, gin.H{"error": "Bad request"}) // 发送错误响应} else {ctx.JSON(http.StatusOK, gin.H{"message": "Success"}) // 发送成功响应}
}

9. 文件上传

也支持处理文件上传。

func FileUpload(ctx *gin.Context) {file, err := ctx.FormFile("file") // 获取上传的文件if err != nil {ctx.JSON(http.StatusBadRequest, gin.H{"error": "Error uploading file"}) // 文件上传失败return}ctx.SaveUploadedFile(file, "path/to/save/"+file.Filename) // 保存文件ctx.JSON(http.StatusOK, gin.H{"message": "File uploaded successfully"}) // 文件上传成功
}

10. 使用中间件

*gin.Context经常在中间件中使用,以执行请求处理前后的动作。

func MyMiddleware(c *gin.Context) {c.Set("myKey", "myValue") // 在中间件中设置值c.Next()                   // 调用下一个中间件或处理器
}func main() {router := gin.Default()router.Use(MyMiddleware) // 使用自定义中间件router.GET("/somepath", func(c *gin.Context) {value := c.Get("myKey") // 从中间件获取值c.JSON(http.StatusOK, gin.H{"myKey": value})})router.Run()
}

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

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

相关文章

空间计量模型及 Stata 具体操作步骤

目录 一、引言 二、空间计量模型理论原理 空间自回归模型&#xff08;SAR&#xff09;&#xff1a; 空间误差模型&#xff08;SEM&#xff09;&#xff1a;&#xff0c; 空间杜宾模型&#xff08;SDM&#xff09;&#xff1a; 三、实证模型构建 四、数据准备 五、Stata …

14-56 剑和诗人30 - IaC、PaC 和 OaC 在云成功中的作用

介绍 随着各大企业在 2024 年加速采用云计算&#xff0c;基础设施即代码 (IaC)、策略即代码 (PaC) 和优化即代码 (OaC) 已成为成功实现云迁移、IT 现代化和业务转型的关键功能。 让我在云计划的背景下全面了解这些代码功能的当前状态。我们将研究现代云基础设施趋势、IaC、Pa…

【电路笔记】-C类放大器

C类放大器 文章目录 C类放大器1、概述2、C类放大介绍3、C类放大器的功能4、C 类放大器的效率5、C类放大器的应用:倍频器6、总结1、概述 尽管存在差异,但我们在之前有关 A 类、B 类和 AB 类放大器的文章中已经看到,这三类放大器是线性或部分线性的,因为它们在放大过程中再现…

Collection 和 Collections 的区别与用法

Collection 和 Collections 的区别与用法 1、Collection 接口1.1 主要特点1.2 常见方法 2、 Collections 工具类2.1 主要特点2.2 常见方法 3、示例代码3.1 使用 Collection 接口3.2 使用 Collections 工具类 4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收…

STM32学习历程(day6)

EXTI外部中断使用教程 首先先看下EXTI的框图 看这个框图就能知道要先初始化GPIO外设 那么和前面一样 1、先RCC使能时钟 2、配置GPIO 选择端口为输入模式&#xff0c; 3、配置AFIO&#xff0c;选择我们用的GPIO连接到后面的EXTI 4、配置EXTI&#xff0c;选择边沿触发方式…

LVS实验

LVS实验 nginx1 RS1 192.168.11.137 nginx2 RS2 192.168.11.138 test4 调度器 ens33 192.168.11.135 ens36 12.0.0.1 test2 客户端 12.0.0.10 一、test4 配置两张网卡地址信息 [roottest4 network-scripts]# cat ifcfg-ens33 TYPEEthernet BOOTPROTOstatic DEFROUTEyes DEVIC…

详解平面DP(上)

前言 其实平面DP和正常的dp没有什么本质上的区别&#xff0c;只不过是在二维的面上进行DP&#xff0c;而且&#xff0c;客观的说&#xff0c;其实和递推没有什么区别&#xff0c;不要把他想的太难了 讲解 本蒻鸡思前想后&#xff0c;好像关于平面DP的理论知识好像没有什么&a…

前后端分离系统

前后端分离是一种现代软件架构模式&#xff0c;特别适用于Web应用开发&#xff0c;它强调将用户界面&#xff08;前端&#xff09;与服务器端应用逻辑&#xff08;后端&#xff09;相分离。两者通过API接口进行数据交互。这种架构模式的主要优势在于提高开发效率、维护性和可扩…

Git命令常规操作

目录 常用操作示意图 文件的状态变化周期 1. 创建文件 2. 修改原有文件 3. 删除原有文件 没有添加到暂存区的数据直接 rm 删除即可&#xff1a; 对于添加到暂存区的数据 文件或目录&#xff1a; 4. 重命名暂存区数据 5. 查看历史记录 6. 还原历史数据 恢复过程的原…

最新深度技术Win7精简版系统:免费下载!

在Win7电脑操作中&#xff0c;用户想要给电脑安装上深度技术Win7精简版系统&#xff0c;但不知道去哪里才能找到该系统版本&#xff1f;接下来系统之家小编给大家带来了深度技术Win7系统精简版本的下载地址&#xff0c;方便大家点击下载安装。系统安装步骤已简化&#xff0c;新…

定位和分析解决std::thread创建失败的问题和解决方法(mmap虚拟地址耗尽)

文章目录 引言问题描述和分析监控shell脚本shell脚本解释 问题根源追溯解决方案一&#xff1a;增大mmap区域解决方案二&#xff1a;优化线程栈空间解决方案三&#xff1a;引入线程池参考文章 引言 在高并发和长周期运行的环境中&#xff0c;频繁创建std::thread线程可能导致mm…

设计模式8-桥模式

设计模式8-Bridge 桥模式 由来与目的模式定义结构代码推导1. 类和接口的定义2. 平台实现3. 业务抽象4. 使用示例总结1. 类数量过多&#xff0c;复杂度高2. 代码重复3. 不符合单一职责原则4. 缺乏扩展性改进后的设计1. 抽象和实现分离&#xff08;桥接模式&#xff09;2. 抽象类…

学习XDMA—20240709

概览&#xff1a; 在内部&#xff0c;子系统可以配置为实现多达8个独立的物理DMA引擎(最多4个H2C和4个C2H)。这些DMA引擎可以映射到单独的AXI4Stream接口&#xff0c;也可以将共享的AXI4内存映射(MM)接口映射到用户应用程序。在axis4 MM接口上&#xff0c;PCI Express的DMA/桥接…

智能警卫:Conda包依赖的自动监控之道

智能警卫&#xff1a;Conda包依赖的自动监控之道 引言 在复杂的软件开发项目中&#xff0c;依赖管理是确保项目健康运行的关键环节。Conda作为Python和其他科学计算语言的强大包管理器&#xff0c;提供了依赖监控功能&#xff0c;帮助用户自动化和简化依赖项的监控过程。本文…

软考高级第四版备考--第15天(建设团队)Develop Team

定义&#xff1a;提高工作能力&#xff0c;促进团队成员互动&#xff0c;改善团队整体氛围以提高项目绩效的过程 作用&#xff1a;改进团队协作、增强人际关系技能、激励员工、减少摩擦以提升整体项目绩效 说明&#xff1a;高效团队行为&#xff1a; 使用开放与有效的沟通&a…

简述 JS 中对象的创建和拷贝

在 JavaScript 中&#xff0c;对象是一种非常重要且灵活的数据结构&#xff0c;用于存储多个值&#xff08;属性&#xff09;和方法&#xff08;函数&#xff09; 对象的创建和拷贝是日常开发中经常涉及的操作&#xff0c;对于业务逻辑的准确实现有着重要的作用 本文将简要概…

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?

linux查看目录下的文件夹命令&#xff0c;find 查找某个目录&#xff0c;但是不包括这个目录本身&#xff1f; Linux中查看目录下的文件夹的命令是使用ls命令。ls命令用于列出指定目录中的文件和文件夹。通过不同的选项可以实现显示详细信息、按照不同的排序方式以及使用不同的…

Profibus转ModbusTCP网关模块实现Profibus_DP向ModbusTCP转换

Profibus和ModbusTCP是工业控制自动化常用的二种通信协议。Profibus是一种串口通信协议&#xff0c;它提供了迅速靠谱的数据传输和各种拓扑结构&#xff0c;如总线和星型构造。Profibus可以和感应器、执行器、PLC等各类设备进行通信。 ModbusTCP是一种基于TCP/IP协议的通信协议…

一次零基础 自“信息收集“到“权限维持“的渗透测试全程详细记录

一、渗透总流程 1.确定目标&#xff1a; 在本靶场中&#xff0c;确定目标就是使用各种扫描工具进行ip扫描&#xff0c;确定目标ip。 2.信息收集&#xff1a; 比如平常挖洞使用fofa&#xff0c;天眼查&#xff0c;ip域名等进行查&#xff0c;在我们这个靶场中比如使用Wappalyz…

基于网络编码的 tcp 变种-tcp/nc

tcp/nc 是指 “tcp with network coding”&#xff0c;是一种结合了网络编码技术的 tcp 变种&#xff0c;网上资源很少&#xff0c;我也不准备多介绍&#xff0c;只介绍它的核心。 传统 tcp 在演进过程中一直搞不定效率问题&#xff0c;网络带宽在增长&#xff0c;cpu 却没有变…