GoFrame 的数据校验主要通过 gvalid 包来实现,提供了一套强大而灵活的数据校验工具。以下是一些基本介绍:

基本用法

1. 使用 gvalid.CheckMap 进行 Map 数据校验:
   package main

   import (
       "fmt"
       "github.com/gogf/gf/frame/g"
       "github.com/gogf/gf/util/gvalid"
   )

   func main() {
       data := g.Map{
           "name":  "John",
           "age":   25,
           "email": "john@example.com",
       }

       rules := []string{
           "name@required|min:3|max:20",
           "age@required|between:18,60",
           "email@required|email",
       }

       if e := gvalid.CheckMap(data, rules); e != nil {
           fmt.Println("Validation failed:")
           fmt.Println(e.Map())
       } else {
           fmt.Println("Validation passed")
       }
   }

2. 使用 gvalid.CheckStruct 进行结构体数据校验:
   package main

   import (
       "fmt"
       "github.com/gogf/gf/util/gvalid"
   )

   type User struct {
       Name  string `v:"required|min:3|max:20"`
       Age   int    `v:"required|between:18,60"`
       Email string `v:"required|email"`
   }

   func main() {
       user := User{
           Name:  "John",
           Age:   25,
           Email: "john@example.com",
       }

       if e := gvalid.CheckStruct(&user, nil); e != nil {
           fmt.Println("Validation failed:")
           fmt.Println(e.Map())
       } else {
           fmt.Println("Validation passed")
       }
   }

常用验证规则

gvalid 包支持丰富的验证规则,以下是一些常用的规则:

  •  required: 必填项。

  •  min、max: 最小值和最大值。

  •  between:min,max: 值必须在指定范围内。

  •  email: 邮箱格式。

  •  alpha、alphaNum、alphaDash: 字母、字母数字、字母数字下划线破折号。

  •  in:val1,val2,...: 值必须在指定的值集合内。


校验结果处理

gvalid 包返回的错误对象是 gvalid.Error 类型,你可以通过该类型的方法获取详细的校验结果信息。例如:
e := gvalid.CheckMap(data, rules)
if e != nil {
    fmt.Println("Validation failed:")
    fmt.Println("Error messages:", e.String())
    fmt.Println("Error fields:", e.Fields())
    fmt.Println("Error maps:", e.Map())
} else {
    fmt.Println("Validation passed")
}

这样,你可以更灵活地处理校验结果,以便根据具体的业务需求进行处理和展示。

GoFrame 的数据校验功能非常强大,支持丰富的验证规则,适用于各种场景下的数据校验需求。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7573/GoFrame