Gin各种参数接收
Gin参数接收
文章目录
- Gin参数接收
- 1.各个参数的接收方法
- Gin中发送JSON数据
- Gin接收querystring数据
- Gin接收Form的参数
- Gin接收URI参数
- 2.参数绑定方式接收(更加方便)
- 推荐一款软件
1.各个参数的接收方法
- 声明: 这里的
c
都是c *gin.Context
中的c
Gin中发送JSON数据
-
在传输或接受JSON数据时,通常习惯通过创建结构体的方式存储数据
-
注意点:
-
- 结构体中成员名需要大写字母开头,否则无法访问
- 需要再成员名后添加tag标签 ,方便传输以及接收数据
-
-
方法
func (c *Context) JSON(code int, obj any) {}
code
是状态码,例如:http.StatusOK
这是go语言内置变量obj
指需要传入的数据
-
代码案例:
package mainimport ("github.com/gin-gonic/gin""log""net/http" )// User 构建数据结构(存储json数据 // 注意:1.需要大写字母开头否则无法访问 // 注意:2.`json`是tag标签,这样方便定义前端显示名称 type User struct {Name string `json:"name"`Gender string `json:"gender"`Age int `json:"age"` }func main() {//启动服务器r := gin.Default()//发起请求r.GET("/Json", func(c *gin.Context) {data := &User{Name: "贤哥",Gender: "男",Age: 18,}c.JSON(http.StatusOK, gin.H{"data": data,})})//运行服务器err := r.Run(":9000")if err != nil {log.Println("启动错误:", err)} }
- 传数据习惯用gin中的
gin.H{}
- 传数据习惯用gin中的
Gin接收querystring数据
-
介绍:
-
//querystring 数据是在URl上的参数,例如:https://www.bing.com/search?q=邓超 //这里的"q = 邓超"就是querystring,其中q是变量,邓超是值
-
-
方法:
c.Query(key)
:根据变量名接收值c.DefaultQuery(key,defaultValue)
:根据变量名接收值,如果没有该变量,就输出定义好的值c.GETQuery(key)
:返回值有两个,一个是接收到的值,一个是布尔值,可以通过判断布尔值查看是否接受到值
-
代码案例
package mainimport ("github.com/gin-gonic/gin""log""net/http" )//querystring 数据是在URl上的参数,例如:https://www.bing.com/search?q=邓超 //这里的"q = 邓超"就是querystring,其中q是变量,邓超是值type User struct {Name string `json:"name"`Age string `json:"age"` }func main() {//创建Gin变量r := gin.Default()//发起请求r.GET("/query", func(c *gin.Context) {//单纯接收querystring的值data1 := c.Query("query")//接收querystring,如果没有接收到值就,输出定义好的值(类似这里的nothing)data2 := c.DefaultQuery("query", "nothing")//获取querystring的值,返回当前值和bool值,如何bool为false,默认返回空值data3, ok := c.GetQuery("query")if !ok {data3 = "nothing"}//可以将querystring的值,解析到结构体中存储//注意:结构体的成员名和querystring的变量名必须一致,否则解析不到var user Usererr := c.BindQuery(&user)if err != nil {log.Println(err)return}//可以用于相同变量却有多个值的情况接收变量,接收后的变量会被保存在切片中//query=尼玛&query=tm 输出 "query4":["尼玛","tm"]data4 := c.QueryArray("query")//通过Json数据发出c.JSON(http.StatusOK, gin.H{"query1": data1,"query2": data2,"query3": data3,"query4": data4,"user": user,})})//启动服务器err := r.Run(":9000")if err != nil {log.Println("启动失败:", err)} }
Gin接收Form的参数
-
结论: 方法的用法和querystring的基本一致
-
代码:
package mainimport ("github.com/gin-gonic/gin""log""net/http" )//任务:接收form的数据 //1.创建form表单 //2.解析数据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)})//点击form的登录按钮提交数据后会发起method方法的请求//所以得写一个post方法以及,输出数据到post渲染的网页r.POST("/login", func(c *gin.Context) {//单个接收表单数据//username := c.PostForm("username")password := c.PostForm("password")//单个接收表单的数据,如果没有参数就输出notDefault//username := c.DefaultPostForm("username", "notDefault")//以数组的方式接收值username := c.PostFormArray("username")//password, ok := c.GetPostForm("username")c.HTML(http.StatusOK, "index.html", gin.H{"username": username[0],"password": password,})//总结接收表单数据的各种函数基本和接收querystring参数的用法一致})//启动服务器err := r.Run(":9000")if err != nil {log.Println(err)return} }
Gin接收URI参数
-
介绍
-
//了解什么是URI参数 //例如一条URL为http://ouzhenxian.com/blog/2023/1 //这里的URL中,可以指定2023和1为参数(是否是参数是由你的接收格式决定的 //格式: "/blog/:year/:mouth",":"后面的参数就是需要被接收的数据
-
-
c.Param
方法和querystring用法基本一致 -
代码:
package mainimport ("github.com/gin-gonic/gin""net/http" ) func main() {r := gin.Default()r.GET("/blog/:year/:mouth", func(c *gin.Context) {year := c.Param("year")mouth := c.Param("mouth")c.JSON(http.StatusOK, gin.H{"year": year,"mouth": mouth,})})//启动服务器err := r.Run(":9000")if err != nil {return} }
2.参数绑定方式接收(更加方便)
-
核心方法
c.ShouldBind()
-
优点: 相比前面的更加快捷高效
-
代码展示
package mainimport ("fmt""github.com/gin-gonic/gin""log""net/http" )//任务: 利用ShouldBind()函数绑定参数type UserInfo struct {Username string `json:"username" form:"username" uri:"username" query:"username"` //注意2点: 字段名需要大写,需要写tag,否则找不到Password string `json:"password" form:"password" uri:"password" query:"password"` }func main() {r := gin.Default()//发出请求r.GET("/json", func(c *gin.Context) {var user UserInfoerr := c.ShouldBindJSON(&user) //注意:这里需要写&,否则是值传递,无法修改值if err != nil {log.Println(err)return}//处理数据fmt.Printf("%#v\n", user) //一起输出c.JSON(http.StatusOK, gin.H{"status": "ok",})})r.GET("/query", func(c *gin.Context) {var user UserInfoerr := c.ShouldBindQuery(&user) //注意:这里需要写&,否则是值传递,无法修改值if err != nil {log.Println(err)return}//处理数据fmt.Printf("%#v\n", user) //一起输出c.JSON(http.StatusOK, gin.H{"status": "ok",})})r.POST("/form", func(c *gin.Context) {var user UserInfoerr := c.ShouldBind(&user) //注意:这里需要写&,否则是值传递,无法修改if err != nil {log.Println(err)return}//处理数据fmt.Printf("%#v\n", user) //一起输出c.JSON(http.StatusOK, gin.H{"status": "ok",})})r.GET("/uri/:username/:password", func(c *gin.Context) {var user UserInfoerr := c.ShouldBindUri(&user) //注意:这里需要写&,否则是值传递,无法修改值if err != nil {log.Println(err)return}//处理数据fmt.Printf("%#v\n", user) //一起输出c.JSON(http.StatusOK, gin.H{"status": "ok",})})//启动服务器err := r.Run(":8080")if err != nil {log.Println(err)return}}
-
注意点:
- 1.结构体成员名首字母大写
- 2.需要指定tag
- 3.
ShouldBind()
接受的值必须是地址值(例如:&user)
-
说明: Gin框架中不是每个数据格式都有对应的
ShouldBind
函数- 例如:这里的JSON数据有—>
c.ShouldBindJSON(&user)
,而这里的表单Form数据没有对应的和函数,那就使用通用的c.ShouldBind(&user)
- 例如:这里的JSON数据有—>
推荐一款软件
Postman
软件: 在做网络开发过程中可以非常方便的传输数据测试,有兴趣的可以自行查看,该软件需要科学
相关文章:
Gin各种参数接收
Gin参数接收 文章目录 Gin参数接收1.各个参数的接收方法Gin中发送JSON数据Gin接收querystring数据Gin接收Form的参数Gin接收URI参数 2.参数绑定方式接收(更加方便)推荐一款软件 1.各个参数的接收方法 声明: 这里的c都是c *gin.Context中的c Gin中发送JSON数据 在传输或接受JS…...

【Python】进阶之 MySQL入门教程
文章目录 数据库概述Mysql概述Mysql安装与使用Navicat安装和使用Mysql终端指令操作Mysql和python交互订单管理案例实现 数据库概述 数据库的由来 发展历程说明人工管理阶段用纸带等进行数据的存储文件系统阶段数据存储在文件中数据库阶段解决了文件系统问题高级数据库阶段分布式…...

Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法
Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法 目录 Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法一、问题描述二、解决方法1.打开 WORD 2019,点击菜单中的“文件”;…...
三个整数排序
描述 给定三个整数,请将它们按从小到大的顺序输出。 输入 输入为一行,包含三个整数,用空格分隔。 输出 输出为一行,包含三个整数,用空格分隔,表示排序后的结果。 输入样例 1 9 3 7 输出样例 1 3 …...
Nginx反向代理出现错误 502 bad gateway 案例解析
场景描述 Nginx uwsgi flask Flask框架写的程序,使用uwsgi启动,Nginx作为反向代理调用Flask应用。 Flask应用有些操作时间比较长,会超过1分钟,在网页端访问会出现错误: 502 bad gateway。 Nginx的错误日志中会出现错误…...

截止到目前全量主体总数有多少?
企业主体类型 企业主体类型有很多种,一般我们会分为公司(有限责任)、合伙企业、个人独资企业、个体经营户这些类别。 今天我们按照企业,个体,组织的分类方式来看各个主体的总数。 企业:统一社会信用代码…...

HTTP--Request详解
请求消息数据格式 请求行 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1 请求头 客户端浏览器告诉服务器一些信息 请求头名称: 请求头值 常见的请求头: User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息 可…...
Linux C++ 网络编程基础(2) : TCP多线程一个server对应多个client
目录 一、linux posix线程相关函数介绍二、tcp server基础版本三、tpc服务端多线程版本四、tpc客户端代码tcp编程时, 一个server可以对应多个client, server端用多线程可以实现. linux下多线程可以使用POSIX的线程函数, 下面给出服务端和客户端的代码. 一、linux posix线程相关…...

如何构建一个 NodeJS 影院微服务并使用 Docker 部署
文章目录 前言什么是微服务?构建电影目录微服务构建微服务从 NodeJS 连接到 MongoDB 数据库总结 前言 如何构建一个 NodeJS 影院微服务并使用 Docker 部署。在这个系列中,将构建一个 NodeJS 微服务,并使用 Docker Swarm 集群进行部署。 以下…...
BEVFusion(ICRA-2023)--01
说明:论文 BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation 原代码运行记录 原始环境:python 3.9 torch 1.12 (失败) 报错: python setup.py develop/mmdet3d/ops/ball_qu…...
Java——Iterator迭代器
在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素ÿ…...

GCC编译过程:预处理->编译->汇编->链接
目录 引言 概括介绍 一、预处理 二、编译 三、汇编 四、链接 总结 引言 当使用集成开发环境(IDE)进行C语言编程时,点击"编译"按钮后,整个C程序从源代码到可执行文件的生成过程会自动完成。IDE会在后台为我们执行C…...

JVM笔记 —— 出现内存溢出错误时时如何排查
一、出现内存溢出的几种情况 内存溢出错误分为StackOverflowError和OutOfMemoryError,前者是栈中出现溢出,后者一般是堆或方法区出现溢出,简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的,无…...
多级嵌套引入组件导致Vue提示子组件未注册问题
发生此问题的时候是页面解析的时报错的, 所以可以放在beforeCreate中执行注册组件这个时候是在页面运行时执行的,运行时编译就结束了 第一种:可以在父组件中动态注册组件 export default{beforeCreate(){//require是commonJS,commonJS导入ES…...
vue3+element-plus组件下拉列表,数组数据转成树形数据
引入组件 可以直接在项目中引入element-plus表格组件,如果需要变成下拉列表样式需要添加以下属性: row-key 必填 最好给数字或唯一属性 , 给每个节点设置id 不填的话 没有办法实现展开效果 load 这个是动态添加数据的 前提(开启…...
【kubernetes】调度约束
目录 调度约束 Pod 启动典型创建过程如下 调度过程 指定调度节点 查看详细事件(发现未经过 scheduler 调度分配) 获取标签帮助 需要获取 node 上的 NAME 名称 给对应的 node 设置标签分别为 ggls 和 gglm 查看标签 修改成 nodeSelector 调度方…...

【深度学习MOT】SMILEtrack SiMIlarity LEarning for Multiple Object Tracking,论文
论文:https://arxiv.org/abs/2211.08824 文章目录 AbstractIntroduction2. 相关工作2.1 基于检测的跟踪2.1.1 检测方法2.1.2 数据关联方法 2.2 基于注意力的跟踪 3. 方法3.1 架构概述3.2 用于重新识别的相似性学习模块(SLM) Experimental Res…...

jmeter通过BeanShell对接口参数进行MD5和HmacSHA256加密【杭州多测师_王sir】
一、在eclipse里面编写MD5加密算法 package com.Base64;import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;public class Md5Utils {public static String md5(String sourceStr) {String result "";try {MessageDigest md Mess…...

基于自适应曲线阈值和非局部稀疏正则化的压缩感知图像复原研究【自适应曲线阈值去除加性稳态白/有色高斯噪声】(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Spring AOP 切点表达式
参考博客: 参考博客...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...