获取参数

获取querystring参数

querystring 指的是URL中 ? 后面携带的参数,例如:http://127.0.0.1:9090/web?query=杨超越。 获取请求的querystring参数的方法如下:

方法1: Query

package main// querystringimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.GET("/web", func(c *gin.Context) {// 获取浏览器那边发请求携带的 query string 参数name := c.Query("query") // 通过Query获取请求中携带的querystring参数c.JSON(http.StatusOK, gin.H{"name": name,})})r.Run(":9090")
}

在这里插入图片描述

方法2: DefaultQuery

package main// querystringimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.GET("/web", func(c *gin.Context) {// 获取浏览器那边发请求携带的 query string 参数name := c.DefaultQuery("query", "somebody") // 取不到就用指定的默认值c.JSON(http.StatusOK, gin.H{"name": name,})})r.Run(":9090")
}

在这里插入图片描述
在这里插入图片描述

方法3: GetQuery

package main// querystringimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.GET("/web", func(c *gin.Context) {// 获取浏览器那边发请求携带的 query string 参数// 取到返回(值, true),取不到返回("", false)name, ok := c.GetQuery("query") if !ok {// 取不到name = "somebody"}c.JSON(http.StatusOK, gin.H{"name": name,})})r.Run(":9090")
}

在这里插入图片描述

在这里插入图片描述

获取多个参数

package main// querystringimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()r.GET("/web", func(c *gin.Context) {// 获取浏览器那边发请求携带的 query string 参数name := c.Query("query")age := c.Query("age")c.JSON(http.StatusOK, gin.H{"name": name,"age":  age,})})r.Run(":9090")
}

在这里插入图片描述

总结

  • GET请求 URL ? 后面的是querystring参数
  • key=value 格式,多个key-value用 & 连接

eg. /web/query=小王子&age=18

获取form参数

login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>login</title>
</head>
<body><form action="/login" method="post" novalidate autocapitalize="off"><div><label for="username">username:</label><input type="text" name="username" id="username"></div><div><label for="password">password:</label><input type="password" name="password" id="password"></div><div><input type="submit" value="登录"></div>
</form></body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>index</title>
</head>
<body>
<h1>Hello, {{ .Name }}!</h1>
<p>你的密码是:{{ .Password }}</p>
</body>
</html>

main.go

package mainimport ("github.com/gin-gonic/gin""net/http"
)// 获取form表单提交的参数func main() {r := gin.Default()r.LoadHTMLFiles("./login.html", "./index.html")r.GET("/login", func(c *gin.Context) {c.HTML(http.StatusOK, "login.html", nil)})// 发请求:访问 /login 的post请求r.POST("/login", func(c *gin.Context) {// 获取form表单的数据/*方法1:PostFormusername := c.PostForm("username")password := c.PostForm("password")*//*方法2:DefaultPostFormusername := c.DefaultPostForm("username", "somebody") // 取到返回值,取不到返回空字符串password := c.DefaultPostForm("password", "somebody")*/// 方法3:GetPostFormusername, ok := c.GetPostForm("username")if !ok {username = "sb"}password, ok := c.GetPostForm("password")if !ok {password = "***"}c.HTML(http.StatusOK, "index.html", gin.H{"Name":     username,"Password": password,})})r.Run(":9090")
}

gin获取URI路径参数

一个

package mainimport ("github.com/gin-gonic/gin""net/http"
)// 获取请求的path(URI)参数,返回的都是字符串类型func main() {r := gin.Default()r.GET("/:name/:age", func(c *gin.Context) {// 获取路径参数name := c.Param("name")age := c.Param("age") // string类型c.JSON(http.StatusOK, gin.H{"name": name,"age":  age,})})r.Run(":9090")
}

在这里插入图片描述

多个

package mainimport ("github.com/gin-gonic/gin""net/http"
)// 获取请求的path(URI)参数,返回的都是字符串类型
// 注意URI的匹配不要冲突func main() {r := gin.Default()r.GET("/user/:name/:age", func(c *gin.Context) {// 获取路径参数name := c.Param("name")age := c.Param("age") // string类型c.JSON(http.StatusOK, gin.H{"name": name,"age":  age,})})r.GET("/blog/:year/:month", func(c *gin.Context) {year := c.Param("year")month := c.Param("month")c.JSON(http.StatusOK, gin.H{"year":  year,"month": month,})})r.Run(":9090")
}

在这里插入图片描述
在这里插入图片描述

gin参数绑定:ShouldBind

package mainimport ("fmt""github.com/gin-gonic/gin""net/http"
)type UserInfo struct {Username string `form:"username" json:"username"`Password string `form:"password" json:"password"`
}func main() {r := gin.Default()r.GET("/user", func(c *gin.Context) {/*username := c.Query("username")password := c.Query("password")u := UserInfo{username,password,}*/var u UserInfo // 声明一个UserInfo类型的变量uerr := c.ShouldBind(&u)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})} else {fmt.Printf("%#V\n", u)c.JSON(http.StatusOK, gin.H{"status": "ok",})}})r.POST("/form", func(c *gin.Context) {var u UserInfo // 声明一个UserInfo类型的变量uerr := c.ShouldBind(&u)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})} else {fmt.Printf("%#V\n", u)c.JSON(http.StatusOK, gin.H{"status": "ok",})}})r.POST("/json", func(c *gin.Context) {var u UserInfo // 声明一个UserInfo类型的变量uerr := c.ShouldBind(&u)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(),})} else {fmt.Printf("%#V\n", u)c.JSON(http.StatusOK, gin.H{"status": "ok",})}})r.Run(":9090")
}

user

在这里插入图片描述

form

在这里插入图片描述

json

在这里插入图片描述

总结

ShouldBind 会按照下面的顺序解析请求中的数据完成绑定:

  • 如果是 GET 请求,只使用 Form 绑定引擎(query)。
  • 如果是 POST 请求,首先检查 content-type 是否为 JSON 或 XML,然后再使用 Form (form-data)。

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

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

相关文章

第6章 右值引用

6.1 左值和右值 区分左值与右值&#xff1a; 看能不能取地址 & 若能取地址则为左值 不能取地址为右值 int x 1; x;//这个是右值 x;//左值 x实现 int tmp x; x x1; return tmp; 返回临时的主要字符串也是左值 它可以取地址 6.2 左值引用 当我们需要将一个对象作为参数…

Vue工程师面试题

Vue工程师面试题通常涵盖Vue的基础知识、核心概念、性能优化、项目实践等多个方面。 一、Vue基础知识 Vue.js是什么? Vue.js(通常简称为Vue)是一个开源的JavaScript框架,用于构建用户界面和单页应用程序(SPA)。它由前谷歌工程师尤雨溪(Evan You)创建,以其轻量级、易用…

引领长期投资新篇章:价值增长与财务安全的双重保障

随着全球金融市场的不断演变&#xff0c;长期投资策略因其稳健性和对价值增长的显著推动作用而日益受到投资者的重视。在这一背景下&#xff0c;Zeal Digital Shares&#xff08;ZDS&#xff09;项目以其创新的数字股票产品&#xff0c;为全球投资者提供了一个全新的长期投资平…

最优化理论与自动驾驶(十一):基于iLQR的自动驾驶轨迹跟踪算法(c++和python版本)

最优化理论与自动驾驶&#xff08;四&#xff09;&#xff1a;iLQR原理、公式及代码演示 之前的章节我们介绍过&#xff0c;iLQR&#xff08;迭代线性二次调节器&#xff09;是一种用于求解非线性系统最优控制最优控制最优控制和规划问题的算法。本章节介绍采用iLQR算法对设定…

分析redis实现分布式锁的思路

文章目录 1、基于redis实现分布式锁&#xff1a;利用key的唯一性1.1、独占排他1.2、死锁问题1.2.1、redis客户端程序获取了锁之后&#xff0c;服务器立马宕机&#xff0c;就会导致死锁。1.2.2、不可重入&#xff1a;可重入 1.3、原子性&#xff1a;加锁和过期之间&#xff1a;s…

深入剖析Docker容器安全:挑战与应对策略

随着容器技术的广泛应用&#xff0c;Docker已成为现代应用开发和部署的核心工具。它通过轻量级虚拟化技术实现应用的隔离与封装&#xff0c;提高了资源利用率。然而&#xff0c;随着Docker的流行&#xff0c;其安全问题也成为关注焦点。容器化技术虽然提供了良好的资源隔离&…

Python青少年简明教程目录

Python青少年简明教程目录 学习编程语言时&#xff0c;会遇到“开头难”和“深入难”的问题&#xff0c;这是许多编程学习者都会经历的普遍现象。 学习Python对于青少年来说是一个很好的编程起点&#xff0c;相对容易上手入门&#xff0c;但语言特性复杂&#xff0c;应用较广&…

Android14 手机蓝牙配对后阻塞问题解决

Android14 手机蓝牙配对后阻塞问题解决 文章目录 Android14 手机蓝牙配对后阻塞问题解决一、前言二、手机蓝牙配对后阻塞问题解决1、部分日志&#xff1a;2、解决方法 三、其他1、Android14 蓝牙 BluetoothService 启动和相关代码介绍2、Android14 待机关机蓝牙自动关闭分析解决…

4.C_数据结构_队列

概述 什么是队列&#xff1a; 队列是限定在两端进行插入操作和删除操作的线性表。具有先入先出(FIFO)的特点 相关名词&#xff1a; 队尾&#xff1a;写入数据的一段队头&#xff1a;读取数据的一段空队&#xff1a;队列中没有数据&#xff0c;队头指针 队尾指针满队&#…

FPGA与Matlab图像处理之直方图均衡化

文章目录 一、什么是直方图?二、什么是直方图均衡化&#xff1f;三、Matlab实现直方图均衡化的步骤第一步&#xff1a; 彩色图像转成灰度图像第二步&#xff1a;提取亮度通道的直方图第三步&#xff1a;累计亮度通道的像素值频率第四步&#xff1a; 映射到新的灰度值 四、Veri…

docker挂载宿主机文件run命令启动报错

背景 使用docker安装mysql8,docker run 命令提示报错 命令: docker run -d \ -p 3306:3306 \ -v ~/docker/mysql8/log/mysqld.log:/var/log/mysqld.log \ -e MYSQL_ROOT_PASSWORD=123456 \ --name mysql8 mysql:8.0.36 报错信息 docker: Error response from daemon: fai…

嵌入式 开发技巧和经验分享

文章目录 前言嵌入式 开发技巧和经验分享目录1.1嵌入式 系统的 定义1.2 嵌入式 操作系统的介绍1.3 嵌入式 开发环境1.4 编译工具链和优化1.5 嵌入式系统软件开发1.6 嵌入式SDK开发2.1选择移植的系统-FreeRtos2.2FreeRtos 移植步骤2.3 系统移植之中断处理2.4系统移植之内存管理2…

【java面经】Redis速记

目录 基本概念 string hash list set zset 常见问题及解决 缓存穿透 缓存击穿 缓存雪崩 Redis内存管理策略 noeviction allkeys-lru allkeys-random volatile-random volatile-ttl Redis持久化机制 RDB快照 AOF追加文件 Redis多线程特性 Redis应用场景 缓…

《C++移动语义:解锁复杂数据结构的高效之道》

在 C的编程世界中&#xff0c;移动语义是一项强大的特性&#xff0c;它能够在处理复杂数据结构如链表、树等时&#xff0c;极大地提高程序的性能和效率。理解并正确实现移动语义在这些复杂数据结构中&#xff0c;对于开发者来说至关重要。 一、移动语义简介 C11 引入了移动语…

【医学半监督】置信度指导遮蔽学习的半监督医学图像分割

摘要: 半监督学习(Semi-supervised learning)旨在利用少数标记数据和多数未标记数据训练出高性能模型。现有方法大多采用预测任务机制,在一致性或伪标签的约束下获得精确的分割图,但该机制通常无法克服确认偏差。针对这一问题,本文提出了一种用于半监督医学图像分割的新…

【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的?

【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的&#xff1f; 【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的&#xff1f; 文章目录 【梯度下降|链式法则】卷积神经网络中的参数是如何传输和更新的&#xff1f;1. 什么是梯度&#xff1f;2.梯度…

2024-04-23 人工智能增强天基通信和传感

砺道智库2024-04-23 11:18 北京 据国家防务网4月19日报道&#xff0c;随着商业卫星、军事星座及其所有数据在太空中流动的数量不断增加&#xff0c;政府和行业运营商表示&#xff0c;他们正在寻求人工智能来帮助他们处理日益复杂的任务。 人工智能软件使用户能够在轨道上改变航…

饲料颗粒机全套设备有哪些机器组成

饲料颗粒机全套设备通常包括原料粉碎、混合机、制粒机、冷却器、筛分机、包装机以及配套的电气控制等多个部分组成&#xff1a;1、粉碎机&#xff1a;将各种饲料原料进行清理、去杂、破碎等预处理&#xff0c;确保原料的纯净度和适宜粒度&#xff0c;为后续加工做准备。2、混合…

【永磁同步电机(PMSM)】 5. PMSM 的仿真模型

【永磁同步电机&#xff08;PMSM&#xff09;】 5. PMSM 的仿真模型 1. 基于 Simulink 的仿真模型1.1 PMSM 的数学模型1.2 Simulink 仿真模型1.3 模块封装&#xff08;mask&#xff09;1.4 三相PMSM矢量控制仿真模型 2. Simscape 的 PMSM 模块2.1 PMSM 模块的配置2.2 PMSM 模块…

系统架构设计师:软件架构的演化和维护

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师:软件架构的演化和维护前言软件架构演化的重要性面向对象的软件架构演…