Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >6.Gin 路由详解 - GET POST 请求以及参数获取示例

6.Gin 路由详解 - GET POST 请求以及参数获取示例

作者头像
Devops海洋的渔夫
发布于 2023-11-20 06:36:17
发布于 2023-11-20 06:36:17
2.1K00
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:0
代码可运行

6.Gin 路由详解 - GET POST 请求以及参数获取示例

GET POST 请求以及参数获取示例

Get 请求:获取 Quary 参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取query参数示例:GET /user?uid=20&name=jack&page=1
r.GET("/user", func(c *gin.Context) {
    // 获取参数
    // Query获取参数
    uid := c.Query("uid")
    username := c.Query("name")
    // DefaultQuery获取参数,可以设置默认值:也就是如果没有该参数,则使用默认值
    page := c.DefaultQuery("page", "1")

    // 返回JSON结果
    c.JSON(http.StatusOK, gin.H{
       "uid":      uid,
       "username": username,
       "page":     page,
    })
})

测试如下:

1696261337707

Get请求:动态路由,获取 Path 参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// GET 获取path路径参数
r.GET("/book/:bid", func(c *gin.Context) {
    // 获取path参数
    bid := c.Param("bid")
    // 返回响应信息
    c.JSON(http.StatusOK, gin.H{
       "message": fmt.Sprintf("bid=%s", bid),
    })
})

测试如下:

1696262492501

Post请求:获取 form 表单数据

为了简单演示,直接使用 apifox 执行 form 表单的请求。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// POST 请求示例:获取 form 表单的参数
r.POST("/addUser", func(c *gin.Context) {
    // 获取form表单参数
    // 使用PostForm获取单个参数
    username := c.PostForm("username")
    // DefaultPostForm如果没有设置该参数,则取默认值
    gender := c.DefaultPostForm("gender", "male")
    // PostFormArray 获取字符串数组参数
    hobby := c.PostFormArray("hobby")
    // 返回响应结果
    c.JSON(http.StatusOK, gin.H{
       "username": username,
       "gender":   gender,
       "hobby":    hobby,
    })
})

测试如下:

1696263335027

获取 GET POST 传递的参数数据,绑定到结构体

为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的 Content-Type 识别请求数据类型并利用反射机制自动提取请求中 QueryString、form 表单、JSONXML 等参数到结构体中。

下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取 JSON、form 表单和 QueryString 类型的数据,并把值绑定到指定的结构体对象

代码示例:

  • 定义 User 结构体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// User 定义结构体,注意首字母大写
type User struct {
    Username string `form:"username" json:"user"`
    Password string `form:"password" json:"password"`
}
  • Get 传值绑定到结构体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Get 传值绑定到结构体 /userinfo?username=jackson&password=123456
r.GET("/userinfo", func(c *gin.Context) {
    // 创建user对象
    var userinfo User
    // 使用ShouldBind绑定参数至对象
    if err := c.ShouldBind(&userinfo); err == nil {
       // 绑定成功,则返回结果
       c.JSON(http.StatusOK, userinfo)
    } else {
       // 绑定失败,则返回错误信息
       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
    }
})

测试如下:

1696264565233

  • Post 传值绑定到结构体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Post 传值绑定到结构体
r.POST("/login", func(c *gin.Context) {
    // 创建user对象
    var userinfo User
    // 使用ShouldBind绑定参数至对象
    if err := c.ShouldBind(&userinfo); err == nil {
       // 绑定成功,则返回结果
       c.JSON(http.StatusOK, userinfo)
    } else {
       // 绑定失败,则返回错误信息
       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
    }
})

测试如下:

1696264705121

获取 Post Xml 数据

API 的开发中,我们经常会用到 JSON 或 XML 来作为数据交互的格式,这个时候我们可以在 gin 中使用 c.GetRawData()获取请求体的数据。

获取 XML 数据
  • 定义 XML 参数的结构体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Article 定义xml参数的结构体
type Article struct {
    Title string `xml:"title"`
    Content string `xml:"content"`
}
  • 定义获取XML参数的API
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Post 获取 XML 请求体参数
r.POST("/xml", func(c *gin.Context) {
    // 从 c.Request.Body 读取请求数据
    body, _ := c.GetRawData()
    // 初始化结构体对象
    article := &Article{}
    // 使用xml.Unmarshal绑定参数至对象
    if err := xml.Unmarshal(body, &article); err == nil {
       // 绑定成功,则返回结果
       c.JSON(http.StatusOK, article)
    } else {
       // 绑定失败,则返回错误信息
       c.JSON(http.StatusBadRequest, err.Error())
    }
})
  • 测试请求xml参数

1696265111439

请求体如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<article>
    <content type="string">AI大时代</content>
    <title type="string">ChatGPT全解析</title>
</article>
获取 JSON 数据
  • 定义 JSON 数据的结构体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// RequestBody 定义json参数的结构体
type RequestBody struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}
  • 定义获取JSON参数的API
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// POST 获取 JSON 请求体参数
r.POST("/api/parsejson", func(c *gin.Context) {
    // 创建请求体的对象
    var reqBody RequestBody

    // 使用 ShouldBindJSON 将 JSON 请求体绑定到结构体
    if err := c.ShouldBindJSON(&reqBody); err != nil {
       // 如果解析失败,返回错误响应
       c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
       return
    }

    // 打印解析后的参数
    fmt.Printf("Name: %s\n", reqBody.Name)
    fmt.Printf("Email: %s\n", reqBody.Email)

    // 返回成功响应
    c.JSON(http.StatusOK, gin.H{
       "message": "JSON body parsed successfully",
       "reqBody": reqBody,
    })
})
  • 测试请求如下

1696265562524

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
初学gin
已经放弃goframe框架,对待新手不是很友好,社区圈子也很小。因为我自身的话是没有go语言的编程基础的,所以导致了我看不太懂那个框架,不过看很多人都说goframe封装的很好,有人吐槽有人夸,开源的框架嘛,这些都是在所难免的。
是小张啊喂
2021/08/09
7560
go语言中gin的用法
在这个示例中,我们使用了gin框架来创建一个简单的HTTP服务。我们定义了四个路由:
周辰晨
2024/03/18
1810
Gin 框架怎么使用自定义验证器?
阅读上面这段代码,我们定义一个 validator.Func 类型的函数变量,参数入参的类型是 validator.FieldLevel,返回结果是一个 bool 类型的变量。
frank.
2024/11/19
800
Gin 框架怎么使用自定义验证器?
Gin 如何编写一个接收文件的 HTTP 接口
以前遇到编程类的问题,第一时间想到的是 Google,而现在我会问 ChatGPT。
恋喵大鲤鱼
2023/02/23
1.4K0
Gin 11
使用 model binding 来将请求中的数据绑定到一个 model 中,形成一个结构体,Gin 目前支持绑定 JSON XML 和标准的表单数据 (foo=bar&boo=baz)
franket
2021/08/10
4680
Go 小清单
这个项目超级简单,前端代码是已经做好的,直接去大佬仓库clone就行,只不过教程比较久远了,所以代码需要一些调整。
f1sh
2024/07/30
970
gin 源码阅读(4) - 友好的请求参数处理
通过 gin 的路由,已经把请求分配到具体的函数里面里面了,下面就要开始处理具体的业务逻辑了。
haohongfan
2021/10/20
1K0
gin学习——邮箱发送验证码注册用户
qq邮箱-设置-账户 安装 go get -u github.com/jordan-wright/email go get -u github.com/garyburd/redigo/redis dao/user_dao.go func SendEmailValidate(em []string) (string,error) { e:=email.NewEmail() e.From = fmt.Sprintf("发件人笔名 <发件人邮箱>") e.To = em // 生成
传说之下的花儿
2023/04/16
1.1K0
gin学习——邮箱发送验证码注册用户
Go语言进行Web开发(Gin)、配置文件
在 Gin 框架中,你可以使用 ShouldBindJSON() 方法来获取 POST 请求中的 JSON 参数。
码客说
2024/03/29
1950
Go:web框架 Gin 简介与实践
gin是用go语言开发的一个web框架,简单易用,是一个轻量级框架。Gin是Golang的一个web框架,封装优雅API友好,源码注释比较明确。借助Gin框架开发web服务,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。
Freedom123
2024/03/29
4770
Go:web框架 Gin 简介与实践
gin学习笔记
首先我们使用 go moudle来管理依赖, go版本要求在 1.11.1 及以上
用户2825413
2020/02/20
7920
Go: Gin框架中的binding验证器使用指南
在Gin框架中,数据绑定和验证是开发API时不可或缺的部分。Gin提供了强大的binding功能,允许我们将请求的数据绑定到结构体,并通过标签进行数据验证。本文将详细讲解如何在Gin中使用binding验证器进行数据验证,并提供代码示例帮助理解。
运维开发王义杰
2024/05/31
1.1K0
Go: Gin框架中的binding验证器使用指南
从零开发区块链应用(七)--gin框架参数获取
本文作者:杰哥的技术杂货铺[1] 一、获取 query 参数 query 指的是 URL ? 后面携带的参数,例如 user/info?username=张三&password=123。获取请求的 q
Tiny熊
2022/02/22
1.1K0
从零开发区块链应用(七)--gin框架参数获取
Gin-Web-Framework官方指南中文(下篇)
ShouldBind,ShouldBindJSON,ShouldBindXML,ShouldBindQuery,ShouldBindYAML
小诚信驿站
2019/10/31
2.4K0
Gin-Web-Framework官方指南中文(下篇)
Go Gin框架请求自动验证和数据绑定,看完这篇就会用了
之前做项目基本上公司是用 gRPC 和 echo 这两个框架的组合,后来 Gin 框架在Go圈越来越流行,陆续我在公司接触到的项目也开始有人用 Gin 框架开发了。
KevinYan
2023/01/03
3.2K0
Go Gin框架请求自动验证和数据绑定,看完这篇就会用了
在gin框架中使用JWT
JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。
luckpunk
2023/09/10
5180
01 . Go框架之Gin框架从入门到熟悉(路由和上传文件)
路由方法有GET, POST, PUT, PATCH, DELETE 和 OPTIONS,还有Any,可匹配以上任意类型的请求
iginkgo18
2020/10/30
1.5K0
boss: 这小子还不会使用validator库进行数据校验,开了~~~
哈喽,大家好,我是asong。这是我的第十篇原创文章。这周在公司做项目,在做API部分开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。最开始在做这一部分的时候,我采用老方法,自己编写参数检验方法,统一进行参数验证。后来在同事CR的时候,说GIN有更好的参数检验方法,gin框架使用github.com/go-playground/validator进行参数校验,我们只需要在定义结构体时使用binding或validatetag标识相关校验规则,就可以进行参数校验了,很方便。相信也有很多小伙伴不知道这个功能,今天就来介绍一下这部分。
Golang梦工厂
2022/07/07
7440
Go语言(十三)Gin Web框架
Gin Web框架 简介 基于httprouter开发的web框架:https://github.com/gin-gonic/gin 提供Martini风格的API,但比Martini要快40倍 非常轻量级,使用简洁 Gin框架的安装与使用 安装: go get -u github.com/gin-gonic/gin 基本使用 import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", fu
alexhuiwang
2020/09/24
8810
Go语言(十三)Gin Web框架
Gin 框架怎么验证绑定到结构体的字段?
在使用 Gin 框架开发项目时,通常我们选择模型绑定的方式接收请求参数,我们在上一遍文章中,已经介绍过使用 Gin 框架接收请求参数的常用方式。
frank.
2024/11/19
640
Gin 框架怎么验证绑定到结构体的字段?
相关推荐
初学gin
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验