这是一个 Go 结构体及字段校验器,包括:跨字段和跨结构体校验,Map,切片和数组,是目前校验器相关库中 Star 数最高的一个,对国际化支持也很好,建议大家使用它。
它具有以下独特功能:
- 通过使用验证标签(tag)或自定义验证程序进行跨字段和跨结构体验证;
- 切片,数组和 map,可以验证任何的多维字段或多层级;
- 能够深入(多维)了解 map 键和值以进行验证;
- 通过在验证之前确定其基础类型来处理接口类型;
- 处理自定义字段类型,例如 sql driver Valuer;
- 别名验证标签,允许将多个验证映射到单个标签,以便更轻松地定义结构上的验证;
- 提取自定义定义的字段名称,例如可以指定在验证时提取 JSON 名称,并将其用于结果 FieldError 中;
- 可自定义的 i18n 错误消息;
- gin Web 框架的默认验证器;
项目地址:<https://github.com/go-playground/validator>,目前 Star 数 4.8k。
## 安装
目前最新版本是 v10,建议使用最新版本:
```bash
$ go get github.com/go-playground/validator/v10
```
在你的代码中使用:
```go
import "github.com/go-playground/validator/v10"
```
## 一个简单的例子
通过一个简单例子来看看如何使用该库。
```go
package main
import (
"fmt"
"flag"
"github.com/go-playground/validator/v10"
)
type User struct {
Name string `validate:"required"`
Age uint `validate:"gte=1,lte=130"`
Email string `validate:"required,email"`
}
var (
name string
age uint
email string
)
func init() {
flag.StringVar(&name, "name", "", "输入名字")
flag.UintVar(&age, "age", 0, "输入年龄")
flag.StringVar(&email, "email", "", "输入邮箱")
}
func main() {
flag.Parse()
user := &User{
Name: name,
Age: age,
Email: email,
}
validate := validator.New()
err := validate.Struct(user)
if err != nil {
fmt.Println(err)
}
}
```
执行如下命令,运行代码:
```
go run main.go -name studygolang -age 7 -email polaris@studygolang.com
```
什么都没有输出,表示一切正常。如果我们提供一个非法的邮箱地址:
```
go run main.go -name studygolang -age 7 -email polaris<a href="/user/studygolang" title="@studygolang">@studygolang</a>
```
输出如下错误:
```
Key: 'User.Email' Error:Field validation for 'Email' failed on the 'email' tag
```
## 小结
Gin 框架默认集成了该库;Echo 框架提供了 Validator 接口,可以很容易的继承该库。大家进行 Web 开发推荐使用。
有疑问加站长微信联系(非本文作者)