Go 语言中,`validator.v10` 库使用案例

407 阅读2分钟

在 Go 语言中,validator.v10(来自 go-playground)是一个非常流行的库,用于对结构体字段进行校验。它使用标签(tag)来定义校验规则,使得校验过程既灵活又易于管理。以下是如何在 Go 中使用 validator.v10 的基本步骤:

安装

首先,你需要安装 validator.v10。在你的 Go 项目中,运行以下命令来安装它:

go get github.com/go-playground/validator/v10

使用

1. 定义结构体和校验规则

在你的 Go 文件中,定义一个结构体,并在其字段的标签中指定校验规则。

package main

import (
    "fmt"
    "github.com/go-playground/validator/v10"
)

// User 结构体定义了用户信息,并在字段标签中指定了校验规则
type User struct {
    FirstName      string `validate:"required,min=2,max=10"` // 必需,长度在2到10之间
    LastName       string `validate:"required,min=2,max=10"` // 必需,长度在2到10之间
    Age            uint8  `validate:"gte=0,lte=130"`         // 年龄在0到130之间
    Email          string `validate:"required,email"`       // 必需,且必须是有效的电子邮件地址
    FavoriteColors []string `validate:"dive,required,min=3,max=10"` // 切片中的每个元素都必需,且长度在3到10之间
}

func main() {
    // ...
}

2. 初始化 Validator 实例

在你的代码中,你需要创建一个 validator.Validate 的实例来执行校验。

var validate *validator.Validate

func init() {
    validate = validator.New()
}

func main() {
    // ...
}

或者,你也可以在 main 函数中直接初始化它。

3. 执行校验

现在,你可以创建 User 结构体的实例,并使用 validate.Struct() 方法来校验它。

func main() {
    user := User{
        FirstName: "John",
        LastName:  "Doe",
        Age:       30,
        Email:     "johndoe@example.com",
        FavoriteColors: []string{"Red", "Green", "Blue"},
    }

    err := validate.Struct(user)
    if err != nil {
        // 如果校验失败,err 将是一个 ValidationErrors 类型的错误
        // 你可以遍历它来获取详细的错误信息
        for _, err := range err.(validator.ValidationErrors) {
            fmt.Println("Field:", err.Field(), "Error:", err.Tag())
        }
        return
    }

    // 如果校验成功,则继续处理...
    fmt.Println("Validation successful!")
}

自定义校验

validator.v10 还支持自定义校验函数,允许你定义自己的校验逻辑。这在你需要执行复杂的校验时非常有用。

注意事项

  • 确保你的结构体字段标签中的校验规则与 validator.v10 支持的规则相匹配。
  • 校验规则是区分大小写的,因此请确保你使用的是正确的标签名(如 required 而不是 Required)。
  • 当你使用自定义类型或复杂的嵌套结构体时,你可能需要编写自定义的校验函数或使用 validator.RegisterCustomTypeFunc 来注册你的类型。

validator.v10 是一个功能强大且灵活的库,它可以帮助你轻松地实现复杂的校验逻辑。通过合理使用它,你可以提高你的 Go 应用程序的健壮性和安全性。