当前位置: 首页 > news >正文

Gin各种参数接收

Gin参数接收

文章目录

  • Gin参数接收
    • 1.各个参数的接收方法
      • Gin中发送JSON数据
      • Gin接收querystring数据
      • Gin接收Form的参数
      • Gin接收URI参数
    • 2.参数绑定方式接收(更加方便)
      • 推荐一款软件

1.各个参数的接收方法

  • 声明: 这里的c都是c *gin.Context中的c

Gin中发送JSON数据

  • 在传输或接受JSON数据时,通常习惯通过创建结构体的方式存储数据

  • 注意点:

      1. 结构体中成员名需要大写字母开头,否则无法访问
      2. 需要再成员名后添加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接收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)

推荐一款软件

  • 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的错误日志中会出现错误&#xf…...

截止到目前全量主体总数有多少?

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

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接口主要用于存储元素&#xff…...

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 切点表达式

参考博客: 参考博客...

【DeepSeek-R1代码相似度引擎解密】:3层语义比对机制、Token归一化偏差修正与Jaccard阈值黄金分割点

更多请点击: https://kaifayun.com 第一章:DeepSeek代码重复检测 DeepSeek-R1 模型在训练过程中引入了严格的代码去重机制,其核心目标是消除训练语料中语义等价或高度相似的代码片段,从而提升模型对真实编程模式的学习能力与泛化…...

适合地产人用的中介房源管理系统

在房产经纪行业,房源管理与客源管理是经纪人日常工作的核心,直接影响业务效率与成交转化。选择一套适配行业需求的中介房源管理系统,能帮助中介团队规范流程、降低运营成本、大幅提升业绩。今天我们以客观视角,详细解析全房源系统…...

Unity项目DrawCall降不下来?试试用Mesh Baker合并贴图集,保姆级图文教程

Unity性能优化实战:用Mesh Baker合并贴图集降低DrawCall全流程解析当你的Unity项目帧率开始卡顿,Profiler里DrawCall数字居高不下时,合并贴图集往往是解决问题的关键一步。本文将以一个实际项目为例,带你从零开始使用Mesh Baker的…...

AutoPentest:面向红队的渗透测试决策引擎架构解析

1. 这不是又一个“自动化扫描器”,而是一套能替你做决策的渗透测试工作流引擎AutoPentest这个名字,第一眼容易让人联想到Nmap加个for循环、或者Burp Suite里点几下Intruder——但实际用过的人很快会意识到:它根本不在同一个维度上。我第一次在…...

GEP协议深度解读:AI智能体自我进化的基因工程

OpenAI 官宣全面支持MCP协议,标志着AI应用架构的"连接标准"已定。如果说MCP是AI时代的USB-C,解决了模型与工具的连接问题,那么GEP(Genome Evolution Protocol,基因组进化协议)则正在解决另一个更本质的问题——智能体的自我进化与生命周期管理。 作为下一代AI基…...

UE5项目打包后RenderTarget导出图片全黑?手把手教你解决伽马校正与资产打包问题

UE5打包后RenderTarget导出图片全黑的终极解决方案当你花了整整三天时间调试RenderTarget导出功能,终于在编辑器里看到完美的截图效果,却在打包成可执行文件后发现所有导出的图片都变成了一片漆黑——这种从云端跌入谷底的感觉,每个UE开发者都…...

PostgreSQL Merge Join 大白话详解

用生活中最直观的例子,彻底搞懂 Merge Join 是什么、为什么快、什么时候用。一、先从生活场景开始 场景一:两摞乱序试卷找同学 期末考试,老师手里有两摞试卷: A 摞:数学试卷,500 份,乱序堆放B 摞…...

自然语言处理的实战项目:从0到1搭建属于自己的文本分类系统

对于软件测试从业者而言,日常工作中我们每天都会接触大量的文本数据:缺陷管理系统中的bug描述、测试用例的步骤说明、用户反馈的问题报告、需求文档的规格描述,甚至是接口返回的异常信息文本。这些非结构化文本往往隐含着关键业务信息&#x…...

企业级Veo 2提示词治理框架(含合规校验/版本回溯/效果归因三模块)——仅限首批500名开发者开放》

更多请点击: https://intelliparadigm.com 第一章:Veo 2提示词治理框架的核心定位与演进逻辑 Veo 2提示词治理框架并非单纯的技术工具升级,而是面向AIGC生产环境规模化、合规化与可审计化需求的战略性基础设施重构。其核心定位在于将离散、经…...

3PEAK思瑞浦 TPA6532-VS1R MSOP8 运算放大器

特性 供电电压:1.75伏至5.5伏 偏移电压:土1.5mV(最大) 通用峰值电压:300kHz,斜率:0.15V/us 轨到轨输入和输出 0.1Hz至10Hz电压噪声:1Vpp 开机和关机电流期间无明显输出抖动 低功耗:每通道最大25安培工作温度范围:-40C至125C...