golang,go,博客,开源,编程
go-playground/validator/v10
是一个用于 Go 语言的开源库,主要用于数据验证。它提供了一个简单而强大的机制,用于验证结构体中的字段是否符合预定的规则,常用于 Web 应用的表单验证、API 请求验证等场景。
该库支持多种常见的验证规则,并允许自定义验证规则。validator/v10
在 Go 社区中非常受欢迎,因其高效、灵活、易于使用的特性。
validator/v10
提供了大量的内置验证规则,例如验证字段是否为有效的电子邮件、手机号、UUID、URL,或者验证字段值是否符合某个范围等。validator/v10
允许用户定义自定义验证规则。validator/v10
在设计时优化了性能,尤其适合高并发的环境。AND
、OR
等逻辑。可以通过 go get
安装 validator/v10
:
go get github.com/go-playground/validator/v10
以下是一个简单的示例,展示了如何使用 validator/v10
来验证结构体中的字段。
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
type User struct {
Name string `json:"name" validate:"required,min=3,max=100"`
Age int `json:"age" validate:"required,gte=18,lte=100"`
Email string `json:"email" validate:"required,email"`
}
func main() {
validate := validator.New()
user := User{
Name: "John",
Age: 25,
Email: "john.doe@example.com",
}
// 验证结构体
err := validate.Struct(user)
if err != nil {
// 如果验证失败,打印错误信息
for _, err := range err.(validator.ValidationErrors) {
fmt.Println("字段", err.Field(), "验证失败,原因:", err.Tag())
}
} else {
fmt.Println("验证通过!")
}
}
validator/v10
使用 Go 的结构体标签来指定字段的验证规则。常见的验证规则有:
required
:字段不能为空。min
:字段值的最小长度或最小值。max
:字段值的最大长度或最大值。email
:验证字段值是否为有效的电子邮件。url
:验证字段值是否为有效的 URL。gte
(greater than or equal):验证字段值是否大于或等于某个值。lte
(less than or equal):验证字段值是否小于或等于某个值。len
:验证字段值的长度。alpha
:验证字段值是否仅包含字母。示例:
type Product struct {
Name string `validate:"required,min=3,max=100"`
Price float64 `validate:"required,gte=0"`
Description string `validate:"omitempty,max=500"`
}
required
:字段必须有值。email
:字段必须是有效的电子邮件地址。url
:字段必须是有效的 URL。min=3
:字段值最小长度为 3。max=10
:字段值最大长度为 10。gte=0
:字段值大于或等于 0。lte=100
:字段值小于或等于 100。alpha
:字段值只允许包含字母字符。alphanum
:字段值只允许包含字母和数字。validator/v10
允许定义自定义验证规则。例如,你可以为某个字段定义一个自定义的验证器,以验证某些特定条件。
import "github.com/go-playground/validator/v10"
// 自定义验证函数
func isEven(fl validator.FieldLevel) bool {
return fl.Field().Int()%2 == 0
}
func main() {
validate := validator.New()
// 注册自定义验证函数
validate.RegisterValidation("even", isEven)
// 测试结构体
type MyStruct struct {
Number int `validate:"even"`
}
test := MyStruct{
Number: 2,
}
err := validate.Struct(test)
if err != nil {
fmt.Println("验证失败:", err)
} else {
fmt.Println("验证通过!")
}
}
validator/v10
支持嵌套结构体的验证。如果结构体字段是另一个结构体,validator
会递归地验证子结构体中的字段。
type Address struct {
Street string `validate:"required"`
City string `validate:"required"`
}
type User struct {
Name string `validate:"required"`
Address Address `validate:"required"`
}
func main() {
user := User{
Name: "John",
Address: Address{
Street: "123 Main St",
City: "New York",
},
}
validate := validator.New()
err := validate.Struct(user)
if err != nil {
fmt.Println("验证失败:", err)
} else {
fmt.Println("验证通过!")
}
}
验证失败时,validator/v10
会返回一个 ValidationErrors
类型的错误,包含了所有验证失败的字段和原因。
err := validate.Struct(user)
if err != nil {
for _, e := range err.(validator.ValidationErrors) {
fmt.Printf("字段 %s 的验证失败,原因: %s\n", e.Field(), e.Tag())
}
}
go-playground/validator/v10
是一个功能丰富的 Go 语言验证库,广泛应用于 Web 应用、API 请求和表单验证等场景。