【Golang】关于Gin框架请求参数的获取

ops/2024/10/24 17:46:09/

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Go语言开发零基础到高阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • Gin框架请求参数的获取
    • 一、请求参数的类型和位置
    • 二、获取请求参数的方法
      • 1. 直接获取请求参数
        • (1)获取URL Path参数
        • (2)获取URL Query参数
        • (3)获取HTTP Body参数
        • (4)获取Header参数
      • 2. 绑定请求参数到结构体
        • (1)绑定URL Query参数到结构体
        • (2)绑定HTTP Body参数到结构体(JSON格式)

Gin框架请求参数的获取

Gin是一个用Go语言编写的Web框架,它提供了强大的路由和中间件功能,使得开发Web应用变得更加简单和高效。
在使用Gin框架开发Web应用时,处理请求参数是一个非常重要的环节。本文将结合实际案例,详细介绍在Go语言中如何使用Gin框架处理请求参数。

一、请求参数的类型和位置

在HTTP请求中,参数可以通过多种方式传递,常见的类型包括:

URL Path参数:参数直接写在请求路径中,例如/user/:id。
URL Query参数:参数跟在URL的?后面,以键值对的形式传递,多个参数之间用&分隔,例如/user/list?name=John&gender=男。
HTTP Body参数:参数在请求体中传递,通常用于POST、PUT等请求方法,内容格式可以是JSON、XML等。
Header参数:参数在HTTP请求头中传递,例如Content-Type、Accept等。

二、获取请求参数的方法

Gin框架提供了多种方法来获取请求参数,包括直接获取和绑定到结构体中两种方式。

1. 直接获取请求参数

(1)获取URL Path参数

URL Path参数是指直接写在请求路径中的参数,可以通过Gin框架的Param方法获取。
后台获取路径请求参数通过ctx.Param(“参数名”) 来获取

示例代码:

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {engine := gin.Default()//请求参数 用:变量名 表示engine.GET("/user/:id", func(ctx *gin.Context) {//后台获取请求参数通过ctx.Param("参数名") 来获取id := ctx.Param("id")//响应到页面//fmt.Fprintf(ctx.Writer, "你的请求id: %s", id)ctx.String(http.StatusOK, "您的id是%s", id)})engine.Run()
}

运行后,发起请求http://localhost:8080/user/100,会返回你的请求id: 100。
在这里插入图片描述

(2)获取URL Query参数

URL Query参数是指跟在URL的?后面的键值对集合,可以通过Gin框架的Query、DefaultQuery、QueryArray、QueryMap等方法获取。

示例代码:

package mainimport ("fmt""github.com/gin-gonic/gin""net/http"
)func main() {engine := gin.Default()engine.GET("/user/list", func(ctx *gin.Context) {name := ctx.Query("name")gender := ctx.DefaultQuery("gender", "男")habits := ctx.QueryArray("habits")fmt.Printf("name: %s, gender: %s, habits: %v\n", name, gender, habits)works := ctx.QueryMap("works")//响应到页面ctx.String(http.StatusOK, "%s, %s, %v, %s\n", name, gender, habits, works)})engine.Run(":8080")
}

运行后,浏览器发起请求
http://127.0.0.1:8080/user/list?name=John&gender=男&habits=reading&habits=sports&works[teacher]=math&works[engineer]=computer
会返回 John, 男, [reading sports], map[engineer:computer teacher:math]
在这里插入图片描述

(3)获取HTTP Body参数

HTTP Body参数是指请求体中的参数,通常用于POST、PUT等请求方法。可以通过Gin框架的PostForm、DefaultPostForm、PostFormArray、PostFormMap等方法获取。

示例代码:

package mainimport ("fmt""github.com/gin-gonic/gin"
)func main() {engine := gin.Default()//使用post请求engine.POST("/user/add", func(ctx *gin.Context) {name := ctx.PostForm("name")gender := ctx.DefaultPostForm("gender", "男")//获取切片数据habits := ctx.PostFormArray("habits")//获取map数据works := ctx.PostFormMap("works")fmt.Printf("%s, %s, %v, %s\n", name, gender, habits, works)})engine.Run()
}

postman发请求
在这里插入图片描述

(4)获取Header参数

Header参数是指HTTP请求头中的参数,可以通过Gin框架的GetHeader方法获取。

示例代码:

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {engine := gin.Default()engine.POST("/getHeader", func(ctx *gin.Context) {//拿到请求头参数数据userAgent := ctx.GetHeader("User-Agent")ctx.String(http.StatusOK, "User-Agent: %s", userAgent)})engine.Run()
}

在这里插入图片描述

2. 绑定请求参数到结构体

Gin框架支持将请求参数自动绑定到结构体中,这样可以更方便地进行参数验证和处理。绑定参数的方法包括Bind、ShouldBind、BindJSON、BindQuery等。

(1)绑定URL Query参数到结构体

示例代码:

package mainimport ("github.com/gin-gonic/gin""net/http"
)// User 定义结构体,使用form标签指定参数名,以便正确地绑定参数 get请求使用功能form标签
type User struct {Id    int64  `form:"id"`Name  string `form:"name"`Age   int    `form:"age"`Email string `form:"email"`
}func main() {engine := gin.Default()engine.GET("/user/info", func(ctx *gin.Context) {var user User//将结构体对象指针传进去if err := ctx.ShouldBindQuery(&user); err != nil {ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}//以json字符串的方式响应给客户端这个结构体对象ctx.JSON(http.StatusOK, user)})engine.Run()
}

在这里插入图片描述

(2)绑定HTTP Body参数到结构体(JSON格式)

当前端请求的数据通过JSON提交时,例如向/json发送一个POST请求

示例代码:

package mainimport ("github.com/gin-gonic/gin""net/http"
)// User 绑定HTTP Body参数到结构体 ,创建结构体时需要用json标签
type User struct {Id    int64  `json:"id"`Name  string `json:"name"`Age   int    `json:"age"`Email string `json:"email"`
}func main() {engine := gin.Default()engine.POST("/user/add", func(ctx *gin.Context) {var user User// ctx.ShouldBindJSON(&user) 将结构体指针传进去if err := ctx.ShouldBindJSON(&user); err != nil {ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}//响应给客户端结构体ctx.JSON(http.StatusOK, user)})engine.Run()
}

在这里插入图片描述

也可以直接获取原生json数据处理

package mainimport ("encoding/json""github.com/gin-gonic/gin""net/http"
)func main() {engine := gin.Default()engine.POST("/json", func(ctx *gin.Context) {// GetRawData : 从c.Request.Body读取请求数据, 返回 []byte// func (c *Context) GetRawData() ([]byte, error)b, _ := ctx.GetRawData()// 定义map或结构体接收var m map[string]interface{}// 将接收的b json反序列化为map数据_ = json.Unmarshal(b, &m)ctx.JSON(http.StatusOK, m)})engine.Run()
}

在这里插入图片描述

gin:auto;margin-top:12px" class="blog-extension-box">

http://www.ppmy.cn/ops/128113.html

相关文章

简易CPU设计入门:验证取指令模块

项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&#xff…

OpenBayes 一周速览|即刻体验Depth Pro,0.3秒get深度图;超高清视频生成模型上线,帧率高达24fps

公共资源速递 This Weekly Snapshots ! 5 个数据集: SynthText 自然场景图像数据集 Caltech-101 物体识别图像数据集 BSDS500 轮廓检测与语义分割数据集 PKU-Market-Phone 手机屏幕表面缺陷分割数据集 Berkeley Cable Routing 多阶段机器人电缆任务…

集合相关:asList()和subList()方法的作用?

1.asList()方法 Arrays.asList(T... a)返回一个固定大小的列表,这个返回的列表的底层实现是一个final修饰的数组,其引用关系不能发生变化,并且它的大小也是固定的,可以修改和读取里面的元素值,但是不能添加或删除元素。…

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时,发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”,直接导致了无法继续安装下去。出现这种情况要怎么解决呢?下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…

CSS 网格布局

网格布局是一个二维布局系统,允许开发者以行和列的形式创建灵活的网络,并将内容放置在网络的单元格中。有些元素可能只占据网络的一个单元,另一些元素则可能占据多行或多列。 网格的大小既可以精确定义,也可以根据自身内容自动计…

PCL 点云配准 3D-NDT算法(精配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 加载点云数据函数 2.1.2 执行 NDT 算法配准函数 2.1.3 可视化配准结果函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目…

数据仓库构建的两种方法:自上向下、自下向上

一、数据仓库基本介绍 数据来源:数据仓库的数据来源多样,它是数据处理、转换和加载到数据库的中央存储,能够让使用者轻易从数据仓库获取数据,并且借助商业智能和分析工具,将数据用于分析和决策制定。 数据仓库运行工…

如何快速解决谷歌网站页面收录难题?

在外贸网站的运营中,页面无法被谷歌收录是一个常见的困扰。即便你的内容再优秀,如果搜索引擎的爬虫无法抓取到你的页面,那一切努力都将白费。而GPC爬虫池服务可以帮助你快速解决网站页面的收录问题。它通过千万级的爬虫池资源,强力…