导读
本套笔记是为了学习过其他语言框架,想要快速掌握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发送数据
可以看到成功绑定
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发送
响应结果如下
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发送信息和接受数据如下
绑定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运行结果