Skip to content

Check

go
func Check(v interface{}, lang ...language.Tag) (errs []*ErrContext, ok bool)

根据 v 的结构体标签和(可选的)Validate() error 方法进行校验。 返回失败列表,以及只有完全无失败时才为 trueok 标志。

输入

参数说明
vstruct、struct 指针,或 struct 切片。其他类型(map、int 等)会返回 (nil, true)
lang可选 locale。第一个值生效,后续被忽略。默认 language.Chinese

行为

  1. nil 安全。 nil 与 typed-nil 指针都会返回 (nil, true)
  2. 指针感知。 指针会被解引用;原值的方法集会先被捕获,所以 Validate() 在传值或传指针时都能找到。
  3. 递归。 嵌套 struct 与 struct 切片会被自动遍历(见 嵌套结构体与切片)。
  4. 标签驱动。 valid:"…" 中的每条规则会针对字段值运行,使用 Checkers 解析校验器函数。
  5. Validate 钩子。 标签规则之后,如果 v(或其指针)有 Validate() error,govalid 会调用它,并追加任何非 nil 的错误。

示例

基本

go
errs, ok := govalid.Check(form)

按调用 locale

go
errs, ok := govalid.Check(form, language.English)

struct 切片

go
items := []Item{{Name: ""}, {Name: "ok"}}
errs, ok := govalid.Check(items)

空指针

go
var f *Form
errs, ok := govalid.Check(f) // 返回 (nil, true)

返回值

errs 是一个 *ErrContext 切片,每项都实现了 error。顺序为:

  1. 顶层字段声明顺序。
  2. struct 切片字段内部,按元素顺序。
  3. 每个元素内部,按字段声明顺序。
  4. Validate() 错误最后追加。

基于 MIT 协议发布。