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



相关文章
|
Go
golang run时报undefined错误【已解决】
golang run时报undefined错误【已解决】
4383 0
golang run时报undefined错误【已解决】
|
网络协议 网络安全
华为openEuler欧拉系统的防火墙常用设置方法
在有防火墙的系统中,比如我们部署了一个WEB项目,我们需要给该WEB项目所需的端口放行。本文介绍了防火墙常用设置方法。
3073 81
|
存储 缓存 安全
面试某大厂,被Go的Channel给吊打了,这次一次性通关channel。
面试某大厂,被Go的Channel给吊打了,这次一次性通关channel。
2013 0
|
SQL 安全 Java
golang为什么不支持可重入锁?
本文对比分析了Java与Go语言中锁机制的不同。在Java中,无论是`synchronized`关键字还是`ReentrantLock`都支持可重入特性,通过维护一个计数器来跟踪锁的嵌套级别,确保同一线程可以多次获取同一把锁而不会造成死锁。然而,Go语言的`sync.Mutex`并不支持这一特性,其设计理念认为可重入锁往往指向代码设计问题,鼓励开发者重构代码以避免此类需求。文章进一步解释了这种设计理念背后的原因,并提供了替代方案示例。总体而言,Go语言试图从设计层面避免潜在的代码问题,尽管这可能会增加一定的开发复杂性。
555 3
golang为什么不支持可重入锁?
|
前端开发 中间件 Java
Day05:Gin框架快速入门05 中间件和路由 | 青训营
Day05:Gin框架快速入门05 中间件和路由 | 青训营
|
JSON Go API
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
|
缓存 移动开发 JavaScript
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
853 2
|
存储 中间件 数据库
go-zero 是如何追踪你的请求链路
go-zero 是如何追踪你的请求链路
|
设计模式 安全 Go
|
安全 网络安全 数据安全/隐私保护