本文共 2534 字,大约阅读时间需要 8 分钟。
go
语言中是没有类似java
一样的注解的方式来校验数据,但是可以在结构体中使用校验方法来校验(本人不是特别的喜欢这种方式,但是对于这门语言也只能这样)1、官网地址
https://github.com/go-playground/validator
2、安装依赖包
go get github.com/go-playground/validator
3、基础的使用参考官网
1、定义接收参数的结构体
type UserInfo struct { Id string `validate:"uuid" json:"id"` //UUID 类型 Name string `validate:"checkName,required" json:"name"` // 自定义校验 Age uint8 `validate:"min=0,max=130,required" json:"age"` // 年龄}
2、自定义方法
func checkNameFunc(f validator.FieldLevel) bool { count := utf8.RuneCountInString(f.Field().String()) if count >= 2 && count <= 12 { return true } else { return false }}
3、在init
函数中注册方法
var valildate *validator.Validatefunc init() { valildate = validator.New() valildate.RegisterValidation("checkName", checkNameFunc)}
4、在main
函数中使用
func main() { router := gin.Default() router.POST("/register", func(c *gin.Context) { user := UserInfo{ } //或者var user = UserInfo err := c.Bind(&user) if err != nil { c.JSON(http.StatusOK, gin.H{ "code": 1, "message": "请求参数错误", }) return } err = valildate.Struct(user) if err != nil { // 输出校验错误 .(validator.ValidationErrors)是断言 for _, e := range err.(validator.ValidationErrors) { fmt.Println("错误字段:", e.Field()) fmt.Println("错误的值:", e.Value()) fmt.Println("错误的tag:", e.Tag()) } c.JSON(http.StatusOK, gin.H{ "code": 1, "message": "数据校验错误", }) return } fmt.Println(user, "接收的数据") c.JSON(http.StatusOK, gin.H{ "code": 0, "message": "请求成功", }) }) router.Run(":8000")}
1、对于多层结构体的数据校验使用dive
2、入参的结构体
type UserInfo struct { Id string `validate:"uuid" json:"id"` //UUID 类型 Name string `validate:"checkName,required" json:"name"` // 自定义校验 Age uint8 `validate:"min=0,max=130,required" json:"age"` // 年龄 Address []Address `validate:"dive" json:"address"` // 收货地址}type Address struct { Province string `json:"province" validate:"required"` // 省份 City string `json:"city" validate:"required"` // 市 County string `json:"county" validate:"required"` //县 Mobile string `json:"mobile" validate:"numeric,len=11"` // 手机号码}
3、使用postman
提交数据
{ "name": "admin", "age": 20, "id": "3f7a783f-f9dc-4db8-9c6b-afe1d3f9b3f7", "address": [ { "province": "广东省", "city":"深圳市", "county": "宝安区", "mobile": "18112345678" } ]}
4、别的和上面一样的结构
转载地址:http://tnvf.baihongyu.com/