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



目录
打赏
0
0
0
0
6
分享
相关文章
Go开发者必读:Gin框架的实战技巧与最佳实践
在当今快速发展的互联网时代,Web开发的需求日益增长。Go语言以其简洁、高效、并发性强的特点,成为了开发者们的首选。而在Go语言的众多Web框架中,Gin无疑是其中的佼佼者。本文将深入探讨Gin框架的特性、优势以及如何利用Gin构建高性能的Web应用。
「offer来了」从基础配置到高级配置,16大知识点带你巩固webpack知识体系
该文章系统地总结了Webpack从基础配置到高级配置的16个关键知识点,包括Loader与Plugin的工作机制、源代码映射(Source Map)的使用、模块划分策略、性能优化技巧等内容,并提供了实际配置示例帮助理解和应用。
「offer来了」从基础配置到高级配置,16大知识点带你巩固webpack知识体系
Web实时通信的学习之旅:WebSocket入门指南及示例演示
Web实时通信的学习之旅:WebSocket入门指南及示例演示
469 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等