Day04:Gin框架快速入门03 bind绑定器| 青训营(一)

简介: Day04:Gin框架快速入门03 bind绑定器| 青训营

导读

本套笔记是为了学习过其他语言框架,想要快速掌握gin框架推行的一套笔记。 虽然为了青训营而制作的一套笔记,但其他想要学go的程序员也可以通过这个上手go世界,后续会带你快速上手gorm,学完这两个之后,简体版抖音基本上就可以独立完成了,后续还会进行大项目的讲解开发,制作不易,喜欢的就点个关注吧。

注意

代码详解大部分是注释的形式给出,请留意代码注释。

Gin框架介绍

导读:Gin是一个非常受欢迎的Golang Web框架,它旨在提供高性能、易用和轻量级的解决方案。

bind绑定器

Gin 框架提供了许多便捷的功能和工具,其中包含了一种基于 HTTP 请求的绑定器,用于将请求中的数据绑定到结构体或参数中。

Gin 框架使用了反射机制,可以根据数据类型自动将请求中的数据绑定到指定的结构体或参数字段上,以实现参数验证和解析功能。绑定器可以方便地处理各种数据格式,如 JSON、XML、表单数据等。

当我们学习这些知识的时候会大量用上标签

ShouldBindJSON

ShouldBindJSON 专门用于处理请求中的 JSON 数据。它会根据请求的 Content-Type 头部自动选择适合的绑定方法,并将 JSON 数据解析为对应的结构体。

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
type User struct {  
Name string `json:"name"`  
Age int `json:"age"`  
Gender int `json:"gender"`  
} //一个user简单的user结构体  
func get(c *gin.Context) {  
var user User  
if err := c.ShouldBindJSON(&user); err != nil {  
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) //绑定失败,返回错误信息  
return  
}  
c.JSON(http.StatusOK, gin.H{"message": "响应成功", "user": user}) //绑定成功,响应user  
}  
func main() {  
router := gin.Default() //设置路由  
router.GET("/user", get)  
router.Run() //设置运行接口  
}

我们使用postman发送数据

image.png

可以看到成功绑定

image.png

ShouldBindQuery

与json类似,但是我们要用form标签。 通过为结构体字段添加 form 标签,你可以指定该字段应该从哪个表单字段中获取值。

当使用框架的参数绑定方法ShouldBindQuery时就会解析请求中的表单数据,并将对应的字段值绑定到 User 结构体的字段上。

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
type User struct {  
Name string `json:"name" form:"name"`  
Age int `json:"age" form:"age"`  
Gender int `json:"gender" form:"gender"`  
} //一个user简单的user结构体  
func get(c *gin.Context) {  
var user User  
if err := c.ShouldBindQuery(&user); err != nil {  
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) //绑定失败,返回错误信息  
return  
}  
c.JSON(http.StatusOK, gin.H{"message": "响应成功", "user": user}) //绑定成功,响应user  
}  
func main() {  
router := gin.Default() //设置路由  
router.GET("/user", get)  
router.Run() //设置运行接口  
}

postman发送

image.png

响应结果如下

image.png

ShouldBindUri

绑定动态参数

uri 标签用于标识结构体字段与URI路径中的参数之间的映射关系。通过为结构体字段添加 uri 标签,我们可以指定该字段应该从URI路径中的哪个参数中获取值。

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
type User struct {  
Name string `uri:"name"`  
Age int `uri:"age"`  
Gender int `uri:"gender"`  
} //一个user简单的user结构体  
func get(c *gin.Context) {  
var user User  
if err := c.ShouldBindUri(&user); err != nil {  
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) //绑定失败,返回错误信息  
return  
}  
c.JSON(http.StatusOK, gin.H{"message": "响应成功", "user": user}) //绑定成功,响应user  
}  
func main() {  
router := gin.Default() //设置路由  
router.GET("user/:name/:age/:gender", get)
router.Run() //设置运行接口  
}

注意要修改路径

postman发送信息和接受数据如下

image.png

绑定form-data、x-www-form-urlencode

这个和前面类似

package main  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
type User struct {  
Name string `form:"name"`  
Age int `form:"age"`  
Gender int `form:"gender"`  
} //一个user简单的user结构体  
func get(c *gin.Context) {  
var user User  
if err := c.ShouldBind(&user); err != nil {  
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) //绑定失败,返回错误信息  
return  
}  
c.JSON(http.StatusOK, gin.H{"message": "响应成功", "user": user}) //绑定成功,响应user  
}  
func main() {  
router := gin.Default() //设置路由  
router.GET("/form", get)  
router.Run() //设置运行接口  
}

postman运行结果

image.png



相关文章
|
C# 安全 Windows
C# 判断用户是否对路径拥有访问权限
如何获取当前系统用户对文件/文件夹的操作权限?  1.获取安全信息DirectorySecurity DirectorySecurity fileAcl = Directory.GetAccessControl(folder); 通过Directory.
2153 0
|
物联网 Go 网络性能优化
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式【1月更文挑战第21天】【1月更文挑战第104篇】
920 1
|
10月前
|
存储 安全 小程序
apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
335 32
apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
|
SQL 安全 Java
golang为什么不支持可重入锁?
本文对比分析了Java与Go语言中锁机制的不同。在Java中,无论是`synchronized`关键字还是`ReentrantLock`都支持可重入特性,通过维护一个计数器来跟踪锁的嵌套级别,确保同一线程可以多次获取同一把锁而不会造成死锁。然而,Go语言的`sync.Mutex`并不支持这一特性,其设计理念认为可重入锁往往指向代码设计问题,鼓励开发者重构代码以避免此类需求。文章进一步解释了这种设计理念背后的原因,并提供了替代方案示例。总体而言,Go语言试图从设计层面避免潜在的代码问题,尽管这可能会增加一定的开发复杂性。
326 3
golang为什么不支持可重入锁?
|
存储 前端开发 程序员
Day05:Gin框架快速入门04 文件上传和下载| 青训营
Day05:Gin框架快速入门04 文件上传和下载| 青训营
|
前端开发 中间件 Java
Day05:Gin框架快速入门05 中间件和路由 | 青训营
Day05:Gin框架快速入门05 中间件和路由 | 青训营
|
算法 区块链 vr&ar
共识算法-PBFT
简介 PBFT简介 BFT(Byzantine Fault Tolerance)是区块链共识算法中需要解决的一个核心问题。例如,公有链网络中,比特币和以太访中用的是POW,EOS用的是DPOS。PBFT一般用于联盟链场景中,它是共识节点较少的情况下BFT的一种解决方案。
3710 0
共识算法-PBFT
|
存储 安全 Go
Golang分段锁
Golang分段锁
237 0
|
缓存 Go
一文掌握 Go 文件的写入操作
本文先是对 File.Write、File.WriteString、File.WriteAt 进行介绍,通过例子演示它们的使用方式;然后介绍 File.Seek,说明了它的用法;最后引出 bufio.NewWriter、Writer.WriteString、Writer.Flush,使用它们代替 File 结构体里的写入方法,可以不用频繁操作磁盘,提高写入效率。
469 1
一文掌握 Go 文件的写入操作
|
Arthas 存储 Java
Arthas中session、tee、version、wc基础命令应用
通过本教程的操作,您可以体验如何Alibaba Cloud Linux  2.1903 LTS 64位操作系统的云服务器上学习session、tee、version、wc基础命令教程用法。

热门文章

最新文章