Golang验证器使用

在Golang中如何使用验证器进行数据验证?有没有推荐的验证库?比如验证用户输入的表单数据是否符合要求,或者验证API请求参数的合法性。希望能提供一些具体的代码示例和最佳实践,特别是如何处理复杂的验证逻辑和自定义验证规则。

2 回复

Golang常用验证器库如go-playground/validator,通过结构体标签定义规则,如validate:"required,email"。支持自定义验证函数,结合Gin等框架可自动校验请求参数,简洁高效。

更多关于Golang验证器使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,验证器(validator)用于验证数据的合法性,例如结构体字段的格式、范围或自定义规则。常用的库是go-playground/validator,它基于结构体标签(tags)定义验证规则。

安装

使用以下命令安装:

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

基本用法

  1. 导入包

    import "github.com/go-playground/validator/v10"
    
  2. 定义结构体并添加标签

    type User struct {
        Name     string `validate:"required,min=3,max=20"`
        Email    string `validate:"required,email"`
        Age      int    `validate:"gte=18,lte=100"`
    }
    
    • required:字段不能为空。
    • min=3:字符串最小长度3。
    • email:必须为邮箱格式。
    • gte=18:数值大于等于18。
  3. 验证数据

    func main() {
        validate := validator.New()
        user := User{
            Name:  "Alice",
            Email: "alice@example.com",
            Age:   25,
        }
    
        err := validate.Struct(user)
        if err != nil {
            // 处理错误
            for _, err := range err.(validator.ValidationErrors) {
                fmt.Println(err.Field(), err.Tag(), err.Param())
            }
            return
        }
        fmt.Println("验证成功!")
    }
    

常用验证标签

  • 字符串:requiredminmaxemailurl
  • 数值:gt(大于)、gte(大于等于)、lt(小于)、lte(小于等于)。
  • 其他:eq(等于)、ne(不等于)。

自定义验证

使用RegisterValidation添加自定义规则:

func customRule(fl validator.FieldLevel) bool {
    return fl.Field().String() == "allowed"
}

validate.RegisterValidation("allowed", customRule)

结构体标签:Field string validate:"allowed"

处理错误

验证失败会返回ValidationErrors,可遍历获取具体错误信息。

注意事项

  • 确保结构体字段为导出字段(首字母大写)。
  • 验证器支持嵌套结构体验证。

通过标签和简单代码即可高效实现数据验证,适用于API请求参数校验等场景。

回到顶部