为了避免结构体默认值带来的困惑,从goframe v2.0版本开始,我们增加了一个Assoc方法,用于结构体校验时严格按照给定的参数而不是按照结构体的属性值(避免结构体属性默认值的影响),而校验规则同样会自动读取结构体中的gvalid tag

该特定对接收客户端请求参数校验的场景特别有用。

使用示例

  1. package main
  2. import (
  3. "github.com/gogf/gf/v2/frame/g"
  4. "github.com/gogf/gf/v2/os/gctx"
  5. )
  6. func main() {
  7. type User struct {
  8. Name string `v:"required#请输入用户姓名"`
  9. Type int `v:"required#请选择用户类型"`
  10. }
  11. var (
  12. ctx = gctx.New()
  13. user = User{}
  14. data = g.Map{
  15. "name": "john",
  16. }
  17. )
  18. err := g.Validator().Assoc(data).Data(user).Run(ctx)
  19. if err != nil {
  20. g.Dump(err.Items())
  21. }
  22. }

执行后,终端输出:

  1. [
  2. {
  3. "Type": {
  4. "required": "请选择用户类型"
  5. }
  6. }
  7. ]

可以看到,结构体中的属性Type校验规则required并没有受到默认值的影响,仍旧被执行了预期的校验检查。