写点什么

Golang Gin 框架之模型绑定(八)

作者:liuzhen007
  • 2021 年 12 月 05 日
  • 本文字数:1723 字

    阅读完需:约 6 分钟

Golang Gin 框架之模型绑定(八)

目录


  • 前言

  • 正文

  • 结尾

前言

Gin 是使用纯 Golang 语言实现的 HTTP Web 框架,Gin 的接口设计简洁,性能极高,现在被广泛使用。上一篇文章我们介绍了 Gin 框架日志管理模块的相关内容,今天我们就来详细看一看 Gin 在模型绑定方面的内容。

正文

很多和服务器对接的小伙伴,一般都会有这样的疑问:服务器端如何读懂来自客户端的请求?其实,这就需要我们提前定义好 API 接口和消息结构体。其中,API 接口非常好理解,就是我们一般说的消息路由,比如 /ping、/v1/upload 等。那么消息结构体是什么呢?就是我们定义的请求参数类型。这也就是我们今天要讨论的内容,为了更好的解析这些请求参数,Gin 框架设计了参数模型绑定机制,可以非常方便的完成请求参数的解析。


目前,Gin 框架支持四种形式的模型绑定,分别是 JSON, XML, YAML 和标准格式 (比如,foo=bar&boo=baz)。当服务器端需要绑定某种形式时,需要提前定义。比如如果想使用 JSON 类型解析参数 name,就需要提前声明 json:"name"


下面看一段代码实例:



// Binding from JSONtype Login struct { User string `form:"user" json:"user" xml:"user" binding:"required"` Password string `form:"password" json:"password" xml:"password" binding:"required"`}
func main() { router := gin.Default()
// 绑定 JSON 类型参数 ({"user": "manu", "password": "123"}) router.POST("/loginJSON", func(c *gin.Context) { var json Login if err := c.ShouldBindJSON(&json); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if json.User != "manu" || json.Password != "123" { c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"}) return } c.JSON(http.StatusOK, gin.H{"status": "you are logged in"}) })
// Example for binding XML ( // <?xml version="1.0" encoding="UTF-8"?> // <root> // <user>user</user> // <password>123</password> // </root>) router.POST("/loginXML", func(c *gin.Context) { var xml Login if err := c.ShouldBindXML(&xml); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if xml.User != "manu" || xml.Password != "123" { c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"}) return } c.JSON(http.StatusOK, gin.H{"status": "you are logged in"}) })
// 绑定 HTML 形式的参数 (user=manu&password=123) router.POST("/loginForm", func(c *gin.Context) { var form Login // This will infer what binder to use depending on the content-type header. if err := c.ShouldBind(&form); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } if form.User != "manu" || form.Password != "123" { c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized"}) return } c.JSON(http.StatusOK, gin.H{"status": "you are logged in"}) })
// 启动服务并监听 8080 端口 router.Run(":8080")}
复制代码


此外,在进行参数模型绑定时,Gin 还提供了两组绑定方法MustBindWith 和 ShouldBindWith,一种是必须绑定模式,一种是应该绑定模式。前者在发生解析错误时,会直接触发错误返回,后者需要开发者自己进行错误处理。相关的方法如下所示:必须绑定模式有 Bind,  BindJSON,  BindXMLBindQuery,  BindYAML,应该绑定模式有ShouldBind,  ShouldBindJSON,  ShouldBindXML,  ShouldBindQuery,  ShouldBindYAML

结尾

好了,今天关于 Gin 框架解析参数模型绑定机制的内容就介绍这么多,如果感兴趣的话,就自己动手是不是吧!希望今天介绍的内容能够帮助到大家,明天再见。


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

发布于: 20 小时前阅读数: 9
用户头像

liuzhen007

关注

敲代码,搞开发。 2021.05.01 加入

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

评论

发布
暂无评论
Golang Gin 框架之模型绑定(八)