概述
Govalidator 是一个 Go 语言库,专注于数据验证与清理,支持字符串、数字、切片、结构体及嵌套数据。灵感来源于 JavaScript 的 validator.js
,它提供了丰富的内置验证函数,同时支持灵活的自定义扩展。
核心功能
安装与导入
1
go get github.com/asaskevich/govalidator
导入到代码:
1
import "github.com/asaskevich/govalidator"
强制字段验证
• 启用SetFieldsRequiredByDefault(true)
后,所有结构体字段需显式标记valid
标签,否则验证失败。
• 例外:使用valid:"-"
或valid:"email,optional"
跳过验证或设为可选。内置验证器
• 字符串:IsURL
、IsEmail
、IsIPv4
、IsCreditCard
等。
• 数值:IsInt
、IsFloat
、InRange
。
• 格式:IsJSON
、IsBase64
、IsUUID
。
• 国际化:IsUTFLetter
、IsFullWidth
。
• 完整列表:超过 70 种验证函数,覆盖常见需求。结构体验证
1
2
3
4
5type User struct {
Name string `valid:"required,alpha"`
Email string `valid:"email"`
}
isValid, err := govalidator.ValidateStruct(User{Name: "Bob", Email: "bob@example.com"})Map 验证
1
2
3
4
5
6template := map[string]interface{}{
"name": "required,alpha",
"age": "numeric,range(18|99)",
}
input := map[string]interface{}{"name": "Alice", "age": 25}
isValid, err := govalidator.ValidateMap(input, template)自定义验证器
• 无参数验证器:1
2
3govalidator.TagMap["isDuck"] = govalidator.Validator(func(str string) bool {
return str == "duck"
})• 带参数验证器:
1
2
3govalidator.ParamTagMap["animal"] = govalidator.ParamValidator(func(str string, params ...string) bool {
return str == params[0]
})错误处理
• 自定义错误消息:1
2
3type Ticket struct {
Name string `valid:"required~Name cannot be empty"`
}• 遍历多错误:
1
2
3
4
5if errs, ok := err.(govalidator.Errors); ok {
for _, e := range errs.Errors() {
fmt.Println(e.Error())
}
}辅助工具
• 字符串处理:Trim
、PadLeft
、Reverse
、WhiteList
(过滤字符)。
• 切片操作:Each
、Map
、Filter
、Count
。
• 类型转换:ToBoolean
、ToFloat
、ToString
。
使用场景
• API 请求验证:确保输入数据符合预期格式。
• 数据清洗:过滤非法字符或格式化字符串。
• 复杂结构校验:嵌套结构体或动态 Map 数据的规则验证。
• 国际化支持:处理多语言字符集的验证需求。
注意事项
• 破坏性变更:v 10 版本后,自定义验证函数需接收上下文参数 func(i interface{}, o interface{}) bool
,以支持依赖验证。
• 性能:大量数据验证时注意性能,可结合基准测试优化。
• 错误消息:优先使用自定义错误提升可读性。
示例代码
1 | package main |
总结
Govalidator 是 Go 生态中功能全面的验证库,适合需要严格数据校验的场景。通过组合内置规则与自定义逻辑,可轻松应对复杂业务需求。使用时注意版本升级的变更,合理设计验证规则以平衡灵活性与性能。