写点什么

Golang Gin 框架参数解析介绍(三)

作者:liuzhen007
  • 2021 年 11 月 16 日
  • 本文字数:1522 字

    阅读完需:约 5 分钟

目录


  • 前言

  • 正文

  • Query 参数解析

  • Multipart/Urlencoded Form 参数解析

  • query + post form 参数解析

  • Map 参数解析

  • 结尾

前言

Gin 是使用纯 Golang 语言实现的 HTTP Web 框架,Gin 的接口设计简洁,性能极高,现在被广泛使用。今天,我们就来详细看看 Gin 是如何进行参数解析的。

正文

Query 参数解析

在所有的请求中,Query 参数属于最常见的一种,下面通过一段代码来看一下,代码如下:


package main 
import "github.com/gin-gonic/gin"
func main() { router := gin.Default() router.GET("/welcome", func(c *gin.Context) { firstname := c.DefaultQuery("firstname", "Guest") lastname := c.Query("lastname")
c.String(http.StatusOK, "Hello %s %s", firstname, lastname) }) router.Run(":8080")}
复制代码


上述 API 接口能够匹配类似如下请求的 URL:


/welcome?firstname=Jane&lastname=Doe


上述 Get 请求中,如果 Query 部分缺少参数 firstname,那么 firstname 的值将赋值为“Guest”;但是,如果缺少参数 lastname,那么 lastname 的值为空。

Multipart/Urlencoded Form 参数解析

在所有的请求中,还有 Multipart/Urlencoded Form 类型的参数,下面通过一段代码来理解一下,代码如下:


package main 
import "github.com/gin-gonic/gin"
func main() { router := gin.Default()
router.POST("/form_post", func(c *gin.Context) { message := c.PostForm("message") nick := c.DefaultPostForm("nick", "anonymous")
c.JSON(200, gin.H{ "status": "posted", "message": message, "nick": nick, }) }) router.Run(":8080")}
复制代码


上述 Post 请求中,如果 Body 部分缺少参数 nick,那么 nick 的值将赋值为“anonymous”;但是,如果缺少参数 message,那么 message 的值为空。

query + post form 参数解析

有些请求可能同时含有 query 参数和 post form 参数,比如:


POST /post?id=1234&page=1 HTTP/1.1

Content-Type: application/x-www-form-urlencoded

name=manu&message=this_is_great


代码实例:


package main 
import "github.com/gin-gonic/gin"
func main() { router := gin.Default()
router.POST("/post", func(c *gin.Context) {
id := c.Query("id") page := c.DefaultQuery("page", "0") name := c.PostForm("name") message := c.PostForm("message")
fmt.Printf("id: %s; page: %s; name: %s; message: %s", id, page, name, message) }) router.Run(":8080")}
复制代码


由上面的例子可以看出,解析 Query 类型的参数时,使用的是 Query 方法和 DefaultQuery 方法;解析 post form 类型的参数时,使用的是 PostForm 方法。

Map 参数解析

请求参数中还有一种类型就是 Map 类型,请求实例如下:


POST /post?ids[a]=1234&ids[b]=hello HTTP/1.1

Content-Type: application/x-www-form-urlencoded

names[first]=thinkerou&names[second]=tianou


这种情况该如何解析呢?请看如下代码:


func main() {  router := gin.Default()
router.POST("/post", func(c *gin.Context) {
ids := c.QueryMap("ids") names := c.PostFormMap("names")
fmt.Printf("ids: %v; names: %v", ids, names) }) router.Run(":8080")}
复制代码


打印结果如下:


ids: map[b:hello a:1234], names: map[second:tianou first:thinkerou]

结尾

好啦,今天介绍了如何利用 Gin 框架解析四种不同参数请求的方法。希望对大家如何熟练使用 Gin 框架有所帮助。


作者简介:大家好,我是 liuzhen007,是一位音视频技术爱好者,同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!

发布于: 4 小时前阅读数: 8
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

本人深耕音视频技术,走全栈路线,前后端通吃,兼顾各端与流媒体服务器。 博客主页地址:https://liuzhen.blog.csdn.net 微信公众号:玩转音视频 欢迎交流学习!

评论

发布
暂无评论
Golang Gin 框架参数解析介绍(三)