Check
go
func Check(v interface{}, lang ...language.Tag) (errs []*ErrContext, ok bool)根据 v 的结构体标签和(可选的)Validate() error 方法进行校验。 返回失败列表,以及只有完全无失败时才为 true 的 ok 标志。
输入
| 参数 | 说明 |
|---|---|
v | struct、struct 指针,或 struct 切片。其他类型(map、int 等)会返回 (nil, true)。 |
lang | 可选 locale。第一个值生效,后续被忽略。默认 language.Chinese。 |
行为
- nil 安全。
nil与 typed-nil 指针都会返回(nil, true)。 - 指针感知。 指针会被解引用;原值的方法集会先被捕获,所以
Validate()在传值或传指针时都能找到。 - 递归。 嵌套 struct 与 struct 切片会被自动遍历(见 嵌套结构体与切片)。
- 标签驱动。
valid:"…"中的每条规则会针对字段值运行,使用Checkers解析校验器函数。 - 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。顺序为:
- 顶层字段声明顺序。
- struct 切片字段内部,按元素顺序。
- 每个元素内部,按字段声明顺序。
Validate()错误最后追加。