gvalid校验组件支持强大的递归校验特性。如果给定的校验数据中的属性或者键值为struct/map/slice类型时,将会被自动执行递归校验。我们来看两个示例: 

成都创新互联主要从事成都做网站、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务从江,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
package main
import (
	"fmt"
	"github.com/GOgf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)
type SearchReq struct {
	Key    string `v:"required"`
	Option SearchOption
}
type SearchOption struct {
	Page int `v:"min:1"`
	Size int `v:"max:100"`
}
func main() {
	var (
		ctx = gctx.New()
		req = SearchReq{
			Key: "GoFrame",
			Option: SearchOption{
				Page: 1,
				Size: 10000,
			},
		}
	)
	err := g.Validator().Data(req).Run(ctx)
	fmt.Println(err)
}执行后,终端输出:
The Size value `10000` must be equal or lesser than 100
package main
import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)
func main() {
	type Student struct {
		Name string `v:"required#Student Name is required"`
		Age  int   
	}
	type Teacher struct {
		Name     string  
		Students []Student 
	}
	var (
		ctx     = gctx.New()
		teacher = Teacher{}
		data    = g.Map{
			"name":     "john",
			"students": `[{"age":2},{"name":"jack", "age":4}]`,
		}
	)
	err := g.Validator().Assoc(data).Data(teacher).Run(ctx)
	fmt.Println(err)
}执行后,终端输出:
Student Name is required
package main
import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)
func main() {
	type Student struct {
		Name string `v:"required#Student Name is required"`
		Age  int
	}
	type Teacher struct {
		Name     string
		Students map[string]Student
	}
	var (
		ctx     = gctx.New()
		teacher = Teacher{
			Name: "Smith",
			Students: map[string]Student{
				"john": {Name: "", Age: 18},
			},
		}
	)
	err := g.Validator().Data(teacher).Run(ctx)
	fmt.Println(err)
}执行后,终端输出:
Student Name is required            Copyright © 2009-2022 www.wtcwzsj.com 青羊区广皓图文设计工作室(个体工商户) 版权所有 蜀ICP备19037934号