本文共 3059 字,大约阅读时间需要 10 分钟。
在Go语言中,由于缺乏像Java那样通过注解直接对数据进行校验的方式,开发者通常会利用结构体中的校验方法来实现数据验证。这虽然在某些程度上增加了代码复杂性,但对于Go语言的特性来说,这是比较常见的处理方式。
安装依赖包
首先需要通过终端安装依赖包:go get github.com/go-playground/validator
使用文档
该工具的使用文档非常详细,开发者可以参考其官方网站或相关文档来快速上手。定义校验规则
首先需要定义一个包含自定义校验的结构体:type UserInfo struct { Id string `validate:"uuid" json:"id"` Name string `validate:"checkName,required" json:"name"` Age uint8 `validate:"min=0,max=130,required" json:"age"` }自定义校验方法
开发者可以编写自定义的校验方法并注册到Validator中:func checkNameFunc(f validator.FieldLevel) bool { if f.Field().String() == "" { return false } return true } var validate *validator.Validate func init() { validate = validator.New() validate.RegisterValidation("checkName", checkNameFunc) }使用校验器
在需要校验数据的部分,使用Validator进行结构体验证:func main() { router := gin.Default() router.POST("/register", func(c *gin.Context) { var user UserInfo if err := c.Bind(&user); err != nil { c.JSON(http.StatusOK, gin.H{ "code": 1, "message": "请求参数错误", }) return } err = validate.Struct(user) if err != nil { for _, e := range err.(validator.ValidationErrors) { fmt.Printf("错误字段: %s\n错误值: %s\n错误tag: %s\n", e.Field(), e.Value(), e.Tag()) } c.JSON(http.StatusOK, gin.H{ "code": 1, "message": "数据校验错误", }) return } fmt.Printf("接收到的数据: %v\n", user) c.JSON(http.StatusOK, gin.H{ "code": 0, "message": "请求成功", }) }) router.Run(":8000") }定义嵌套结构体
假设需要校验用户的收货地址:type Address struct { Province string `validate:"required" json:"province"` City string `validate:"required" json:"city"` County string `validate:"required" json:"county"` Mobile string `validate:"numeric,len=11" json:"mobile"` } type UserInfo struct { Id string `validate:"uuid" json:"id"` Name string `validate:"checkName,required" json:"name"` Age uint8 `validate:"min=0,max=130,required" json:"age"` Address []Address `validate:"dive" json:"address"` }使用postman提交测试数据
通过postman工具提交以下数据:{ "name": "admin", "age": 20, "id": "3f7a783f-f9dc-4db8-9c6b-afe1d3f9b3f7", "address": [ { "province": "广东省", "city": "深圳市", "county": "宝安区", "mobile": "18112345678" } ] }通过上述方法,可以轻松实现多层嵌套数据的校验,进一步提升数据处理的安全性和准确性。
转载地址:http://tnvf.baihongyu.com/