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



目录
相关文章
|
2月前
|
C++
【C++】bind绑定包装器全解(代码演示,例题演示)
【C++】bind绑定包装器全解(代码演示,例题演示)
|
8月前
|
Go API 网络架构
Gin框架快速入门1
Gin框架快速入门1
74 0
|
SQL 前端开发 安全
Gin-Vue-Admin 使用 gin+vue 进行极速开发的全栈开发基础平台【gva 第一节】
功能: 1.增加了 pgsql 数据库初始化,用户可选用 pgsql 进行开发。 2.增加了业务数据库功能,用户可通过 yaml 中配置自己的业务数据库,根据 name 获取业务库进行业务操作,实现框架和业务的数据库分离。 3.oss 集成了华为云 oss。 4.前端打包增加了提示内存不足时的一键 node 内存扩容 build 命令。 5.调整了获取用户信息的方法,增加了不鉴权模式下的用户信息获取方式。 6.配置页面调整。 7.取消了自动化代码中数据库类型和 size 的选择模块,防止自动化代码报错。
468 0
|
9月前
|
JSON 数据格式 存储
No.12 gin框架中的binding究竟是干嘛的?(二)
No.12 gin框架中的binding究竟是干嘛的?
No.12 gin框架中的binding究竟是干嘛的?(二)
|
9月前
|
Go
No.12 gin框架中的binding究竟是干嘛的?(一)
No.12 gin框架中的binding究竟是干嘛的?
|
11月前
|
前端开发 中间件 Java
Day05:Gin框架快速入门05 中间件和路由 | 青训营
Day05:Gin框架快速入门05 中间件和路由 | 青训营
105 0
|
11月前
|
存储 前端开发 程序员
Day05:Gin框架快速入门04 文件上传和下载| 青训营
Day05:Gin框架快速入门04 文件上传和下载| 青训营
287 0
|
11月前
|
前端开发
Day04:Gin框架快速入门03 bind绑定器| 青训营(二)
Day04:Gin框架快速入门03 bind绑定器| 青训营
141 0
|
11月前
|
JSON 缓存 程序员
Day04:Gin框架快速入门02 请求| 青训营
Day04:Gin框架快速入门02 请求| 青训营
177 0
|
11月前
|
XML JSON 前端开发
Day03:Gin框架快速入门01 响应| 青训营
Day03:Gin框架快速入门01 响应| 青训营
87 0