包验证器根据标签对结构体和单个字段进行值验证。它具有以下独特的功能,可通过使用验证标记或自定义验证器进行跨字段和跨结构验证。切片、数组和map,允许验证多维字段的任何或所有级别。能够深入研究映射键和值以进行验证。
安装验证包:
go get github.com/go-playground/validator
示例代码:
package main
import (
"fmt"
"github.com/go-playground/validator"
)
// User contains user information
type User struct {
FirstName string `json:"fname" validate:"alpha"`
LastName string `json:"lname" validate:"alpha"`
Age uint8 `validate:"gte=20,lte=65"`
Email string `json:"e-mail" validate:"required,email"`
JoiningDate string `validate:"datetime"`
}
// use a single instance of Validate, it caches struct info
var validate *validator.Validate
func main() {
validate = validator.New()
user := &User{
FirstName: "Test25",
LastName: "Test",
Age: 75,
Email: "Badger.Smith@",
JoiningDate: "005-25-10",
}
err := validate.Struct(user)
if err != nil {
if _, ok := err.(*validator.InvalidValidationError); ok {
fmt.Println(err)
return
}
fmt.Println("------ List of tag fields with error ---------")
for _, err := range err.(validator.ValidationErrors) {
fmt.Println(err.StructField())
fmt.Println(err.ActualTag())
fmt.Println(err.Kind())
fmt.Println(err.Value())
fmt.Println(err.Param())
fmt.Println("---------------")
}
return
}
}
输出:
------ List of tag fields with error ---------
FirstName
alpha
string
Test25
---------------
Age
lte
uint8
75
65
---------------
Email
email
string
Badger.Smith@
---------------
JoiningDate
datetime
string
005-25-10
---------------