go-playground/validator | Go 数据验证

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Валидация данных в Go с помощью go-playground/validator

在 Go (Golang) 的现代开发中,输入数据验证是处理请求、表单或配置的关键步骤。go-playground/validator 库是验证结构体、字段和复杂嵌套对象的事实标准。它提供了一套强大的验证规则(标签),支持自定义错误消息、国际化以及与 Web 框架的集成。

为什么需要数据验证?

手动检查每个字段会导致代码重复和错误。validator 允许您直接在结构体标签中描述规则,使代码清晰、声明式且易于维护。您可以检查类型、范围、字段必填性、格式(email、URL、UUID),甚至执行跨字段比较。

安装

要安装该库,请在终端中执行以下命令(需要 Go 1.18+):

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

然后在代码中导入包:

import "github.com/go-playground/validator/v10"

主要功能

  • 验证标签:required、min、max、len、email、url、uuid、oneof 等数十种。
  • 自定义验证器:通过 RegisterValidation 创建自己的规则。
  • 嵌套结构体:检查嵌套对象内部的字段。
  • 错误消息:支持多种语言的翻译和自定义文本。
  • 批量验证:验证数组和切片。

Go (Golang) 代码示例

package main

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

// User 表示带有验证标签的结构体type User struct { Name string `validate:"required,min=2,max=50"` Email string `validate:"required,email"` Age int `validate:"gte=0,lte=130"` Role string `validate:"required,oneof=admin user guest"`}

func main() { validate := validator.New()

user := User{ Name: "A", Email: "invalid-email", Age: 200, Role: "superadmin", }

err := validate.Struct(user) if err != nil { for _, err := range err.(validator.ValidationErrors) { fmt.Printf("字段 '%s' 验证失败: %s", err.Field(), err.Tag()) } } else { fmt.Println("数据有效!") }}

何时使用 go-playground/validator?

该库非常适合任何需要可靠输入数据验证的 Go 项目:REST API(与 Gin、Echo、Chi 配合使用)、表单处理、配置文件、CSV/JSON 解析。在微服务架构中尤其有用,每个服务都必须保证输入数据的正确性。

如果您需要快速、灵活且可扩展的验证,而无需编写大量条件语句——go-playground/validator 将是您的最佳选择。

推荐