这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
本文章只作为初学者学习gin的记录,笔记记录的是探索的过程,若有错误,还请见谅。
第一段代码:
不熟悉的结构很多,gin.Default(),gin.Context,gin.H以及括号缭乱的结构
1. gin.H 其实就是map[string]interface{},代表了键类型为string,值类型随意的数据结构,在数据绑定的过程中会经常用到.
2. Context和Engine是gin的结构体,内部实现了很多方法,先稍稍了解下gin.Default
此函数创建了一个默认的Engine类引擎
3. Get和Post函数参数包含一个相对路径和匿名函数,匿名函数用来实现需要的功能,具体要看应用的场景
4. 试着写写看:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
type Test struct {
Txt1 string form:"txt1" json:"txt1" binding:"required"
Txt2 string form:"txt2" json:"txt2" binding:"required"
}
func main() {
r := gin.Default()
r.GET("/test", func(c *gin.Context) {
ts := &Test{"test", "test again"}
if err := c.ShouldBind(ts); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"ERROR": err.Error()})
} else {
c.JSON(http.StatusOK, gin.H{"message": "Good!"})
}
})
r.Run()
}
验证结果:
运行结果:
5. 数据解析和绑定:
Bind类型:
required:必填内容
Omitempty:选填,如果内容是零值就跳过
unique:确保内容唯一性,对不同类型处理方式不同
min,max:对数字类型代表最小最大值,对字段限制字段长度
email:必须是邮件格式
Oneof:在指定值中选取
数据捆绑的模式有两类:
1.Mustbind
2.Shouldbind
可以看出二者底层使用的方法不同,
后者绑定失败,会返回错误,让开发人员检测到,而前者会将http响应状态设置为400(http.StatusBadRequest),如果不熟悉详细情况但是想要更好的控制程序,使用Shouldbind较好。