gin框架使用系列之三——获取表单数据

一、获取get参数

get请求的参数是直接加在url后面的,在gin中获取get请求的参数主要用Query()和DefaultQuery()两个方法,示例代码如下

go 复制代码
router.GET("/welcome", func(c *gin.Context) {
		// 获取get请求的参数,如果没有,可以指定默认值
		firstName := c.DefaultQuery("firstname", "Guest")
		// 获取get请求的参数,如果没有,则为空
		lastName := c.Query("lastname")
		c.JSON(http.StatusOK, gin.H{
			"first_name": firstName,
			"last_name":  lastName,
		})
	})

在浏览器中输入全部参数的运行如下:

如果不输入参数,运行结果如下:

二、获取post的参数

post表单的获取方式是DefaultPostForm()和PostForm()两个函数,如下所示:

go 复制代码
	router.POST("/form_post", func(c *gin.Context) {
		// 获取post表单请求的参数,如果没有,可以指定默认值
		message := c.DefaultPostForm("message", "Guest")
		// 获取post表单请求的参数,如果没有,则为空
		nick := c.PostForm("nick")
		c.JSON(http.StatusOK, gin.H{
			"message": message,
			"nick":    nick,
		})
	})

在请求中输入全部参数的结果

在浏览器中不输入参数的结果

三、用struct方式获取form表单绑定参数

上面的示例中,我们都是从gin的入参gin.Context中直接获取的,其实我们可以直接将对应的参数转成一个实例对象,这样更加方面我们的开发,具体做法如下:

  • 首先我们需要创建一个struct,在struct中使用tag来绑定form的表单数据
go 复制代码
type FormMessage struct {
	Message string `form:"message"`
	Nick    string `form:"nick"`
}
  • 在代码中绑定最终的对象
go 复制代码
router.POST("/form_post_struct", func(c *gin.Context) {
		var message FormMessage
		// 绑定数据
		c.Bind(&message)
		c.JSON(http.StatusOK, gin.H{
			"message": message.Message,
			"nick":    message.Nick,
		})
	})

输入全部参数的返回结果

不传参数的结果

三、输入json数据的参数获取

在我们实际开发中,经常是用json的数据来传递的,但是上面的方式对与json数据是获取不到数据的,如下所示:

那在gin中如何获取json传入的数据呢?

其实方法很简单,只需要将上面步骤中绑定的表单数据的tag中的form字符串换成json,就可以接受json数据了

go 复制代码
type FormMessage struct {
	Message string `json:"message"`
	Nick    string `json:"nick"`
}

这时候重启项目,我们输入json数据,就能获取到json传入的值了


后记

个人总结,欢迎转载、评论、批评指正

相关推荐
_码力全开_14 小时前
P1005 [NOIP 2007 提高组] 矩阵取数游戏
java·c语言·c++·python·算法·矩阵·go
程序员爱钓鱼17 小时前
Python编程实战 · 基础入门篇 | Python程序的运行方式
后端·go
光头闪亮亮2 天前
gozxing库-对图片中多个二维码进行识别的完整示例教程
go
召摇2 天前
在浏览器中无缝运行Go工具:WebAssembly实战指南
后端·面试·go
王中阳Go2 天前
我发现不管是Java还是Golang,懂AI之后,是真吃香!
后端·go·ai编程
半枫荷2 天前
二、Go语法基础(基本语法)
go
struggle20253 天前
AxonHub 开源程序是一个现代 AI 网关系统,提供统一的 OpenAI、Anthropic 和 AI SDK 兼容 API
css·人工智能·typescript·go·shell·powershell
Mgx3 天前
高性能 Go 语言带 TTL 的内存缓存实现:精确过期、自动刷新、并发安全
go
千码君20164 天前
Go语言:记录一下Go语言系统学习的第一天
java·开发语言·学习·golang·gin·并发编程·编译语言
考虑考虑4 天前
go格式化时间
后端·go