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

简介: Gin 是使用纯 Golang 语言实现的 HTTP Web 框架,Gin 的接口设计简洁,性能极高,现在被广泛使用。上一篇文章我们介绍了 Gin 框架日志管理模块的相关内容,今天我们就来详细看一看 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 JSONtypeLoginstruct {
Userstring`form:"user" json:"user" xml:"user"  binding:"required"`Passwordstring`form:"password" json:"password" xml:"password" binding:"required"`}
funcmain() {
router :=gin.Default()
// 绑定 JSON 类型参数 ({"user": "manu", "password": "123"})router.POST("/loginJSON", func(c*gin.Context) {
varjsonLoginiferr :=c.ShouldBindJSON(&json); err!=nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return        }
ifjson.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) {
varxmlLoginiferr :=c.ShouldBindXML(&xml); err!=nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return        }
ifxml.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) {
varformLogin// This will infer what binder to use depending on the content-type header.iferr :=c.ShouldBind(&form); err!=nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return        }
ifform.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 还提供了两组绑定方法MustBindWithShouldBindWith,一种是必须绑定模式,一种是应该绑定模式。前者在发生解析错误时,会直接触发错误返回,后者需要开发者自己进行错误处理。相关的方法如下所示: 必须绑定模式有 Bind,  BindJSON,  BindXML,  BindQuery,  BindYAML,应该绑定模式有ShouldBind,  ShouldBindJSON,  ShouldBindXML,  ShouldBindQuery,  ShouldBindYAML

结尾

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



作者简介:大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,同时也是CSDN博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!


目录
相关文章
|
2月前
|
中间件 Go 数据库
Go开发者必读:Gin框架的实战技巧与最佳实践
在当今快速发展的互联网时代,Web开发的需求日益增长。Go语言以其简洁、高效、并发性强的特点,成为了开发者们的首选。而在Go语言的众多Web框架中,Gin无疑是其中的佼佼者。本文将深入探讨Gin框架的特性、优势以及如何利用Gin构建高性能的Web应用。
|
6月前
|
存储 监控 Linux
Golang 语言的 goroutine 调度器模型 GPM
Golang 语言的 goroutine 调度器模型 GPM
40 0
|
6月前
|
关系型数据库 MySQL Go
Golang 语言 Web 框架 beego v2 之读操作(上)
Golang 语言 Web 框架 beego v2 之读操作
29 0
|
6月前
|
存储 关系型数据库 MySQL
Golang 语言 Web 框架 beego v2 之写操作
Golang 语言 Web 框架 beego v2 之写操作
54 0
|
5月前
|
SQL 关系型数据库 Go
Golang ORM框架介绍及比较
Golang ORM框架介绍及比较
|
5月前
|
Go API 开发者
Golang Websocket框架:实时通信的新选择
Golang Websocket框架:实时通信的新选择
|
6月前
|
开发框架 Go 微服务
Golang 语言怎么使用 go-micro 和 gin 开发微服务?
Golang 语言怎么使用 go-micro 和 gin 开发微服务?
116 0
|
6月前
|
SQL Go
Golang 语言 Web 框架 beego v2 之读操作(下)
Golang 语言 Web 框架 beego v2 之读操作(下)
44 0
|
3月前
|
关系型数据库 MySQL Go
go语言使用Gin框架链接数据库
go语言使用Gin框架链接数据库
40 0
|
3月前
|
JavaScript 前端开发 NoSQL
go embed 实现gin + vue静态资源嵌入
go embed 实现gin + vue静态资源嵌入
64 0