Golang常用库之字段参数验证库-validator使用详解
在 Golang 开发中,字段参数验证是一项重要的任务。一些以数据为中心的应用程序需要处理大量的用户输入、API 调用、HTTP 表单数据和其他数据。但是,如果不对这些数据进行验证和过滤,将难以保障数据安全,从而导致系统损失。而使用 Golang 的验证库-validator,可以使我们的验证和过滤任务更轻松和简单。
Validator 库是什么?
Validator 是一个 Golang 字段参数验证库。它帮助开发人员提供易于使用和强大的数据验证框架,减轻了开发人员验证数据的负担,提高了生产率。Validator 库提供了简单、灵活的 API 接口,可以让你方便地验证和处理不同类型的输入数据,以确保应用程序的兼容性和数据的安全性。
Validator 库用法
1. 安装 Validator 库
要使用 Validator 库,必须首先安装它。你可以使用 go get 命令从 Golang 公共仓库中下载和安装 Validator 库。在终端输入以下命令:
go get gopkg.in/go-playground/validator.v9
2. 定义数据模型
要使用 Validator 库进行数据验证,必须首先定义数据的基本结构。使用 Validator 库,你需要创建一个数据结构与 tag 标记一起使用,标记定义了数据字段的约束和限制。
type User struct {
Name string `validate:"required"`
Email string `validate:"required,email"`
Age int `validate:"required,gt=1,lte=999"`
Password string `validate:"required,len=6"`
}
上面的数据结构定义了一个 User 类型的数据结构,其中包括 Name、Email、Age 和 Password 等字段。每个字段都指定了有关该字段的验证规则。例如,Name 字段使用 validate:"required"
指示它是必需的,Email 字段使用 validate:"required,email"
指示它是必需的且必须是有效的电子邮件地址。
3. 使用 Validator 进行数据验证
在定义了数据结构后,就可以使用 Validator 进行数据验证。Validator 验证程序的入门点是 validator.New() 函数。使用 New() 函数创建一个新的验证器对象,可以使用 Validate() 函数对数据进行验证。
import "gopkg.in/go-playground/validator.v9"
func main() {
// 创建一个新的验证器
validate := validator.New()
// 要验证的数据
user := User{
Name: "John Doe",
Email: "john.doe@acme.com",
Age: 20,
Password: "secret",
}
// 验证数据
err := validate.Struct(user)
if err != nil {
// 处理验证错误
panic(err)
}
}
上面的代码使用创建了一个新的验证器对象,并使用定义的 User 数据类型的变量 user 来尝试验证。如果有任何验证错误,程序将抛出一个 Panic 异常,从而使程序中断。
4. 使用 Validator 自定义错误消息
Validator 库还允许你指定自定义错误消息。你可以使用 tag 标记的一些变量来定义自定义错误消息。例如,要使用自定义消息来验证 age 字段的限制,可以按如下方式指定:
type User struct {
Name string `validate:"required"`
Email string `validate:"required,email"`
Age int `validate:"required,gt=1,lte=999" error:"年龄必须在 1 到 999 年之间!"`
Password string `validate:"required,len=6"`
}
上面的代码使用 error:"年龄必须在 1 到 999 年之间!"
来定义 age 字段的自定义错误消息。
Validator 库代码示例
接下来我们的代码示例将实现如下功能:
定义了一个数据类型 Order,其中包括 Name、Price 和 Discount 等字段。除此之外,还定义了一个 Validator 验证器,并在数据测试用例中进行调用,用以验证数据的正确与否。
package main
import (
"fmt"
"gopkg.in/go-playground/validator.v9"
)
type Order struct {
Name string `validate:"required,min=5,max=20"`
Price int `validate:"required,gt=0"`
Discount int `validate:"required,gt=0,lte=100"`
StartTime string `validate:"required,datetime=2006-01-02 15:04:05"`
}
var validate *validator.Validate
func main() {
validate = validator.New()
order1 := Order{
Name: "MacBook Pro",
Price: 20000,
Discount: 30,
StartTime: "2022-01-02 15:04:05",
}
if err := validate.Struct(order1); err != nil {
fmt.Println("order1 data validation failed!")
fmt.Println(err)
} else {
fmt.Println("order1 data validation succeeded!")
}
order2 := Order{
Name: "Laptop",
Price: 0,
Discount: 120,
StartTime: "2022-00-02 15:04:05",
}
if err := validate.Struct(order2); err != nil {
fmt.Println("order2 data validation failed!")
fmt.Println(err)
} else {
fmt.Println("order2 data validation succeeded!")
}
}
上面的代码中,我们使用 Validator 验证器,并对数据模型进行了定义。运行后输出结果为:
order1 data validation succeeded!
order2 data validation failed!
Key: 'Order.Price' Error:Field validation for 'Price' failed on the 'gt' tag
Key: 'Order.Discount' Error:Field validation for 'Discount' failed on the 'lte' tag
Key: 'Order.StartTime' Error:Field validation for 'StartTime' failed on the 'datetime' tag
上述代码正确地验证了我们的订单数据。对于订单 1,价格为正且适当减价。而对于订单 2,价格为 0,并且折扣值过高,不合理。此外,该订单的开始时间不是一个合法的日期时间类型,也不符合我们的要求。因此,Validator 应用程序输出了相应的错误消息。
结论
在这篇文章中,我们已经详细地介绍了 Golang 中常用的字段参数验证库-validator。我们首先讲解了 Validator 的基本概念和用法,然后通过代码示例来源于真实场景的验证数据的过程,展示了如何使用该库验证不同的数据,并通过输出结果进行了验证。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang常用库之字段参数验证库-validator使用详解 - Python技术站