在go项目中,经常有校验数据合法性的需求,比如邮箱、年龄、车牌号、网址、字符串长度、金额、枚举范围等。一个好的校验包能帮我们少写很多ifelse,提高系统的可维护性。
validate包内置了丰富的校验语法,包括字符串、数字、邮箱等,当然如果我们有定制化的校验提示文案或者校验规则,validate也支持定制化校验。
# 安装validate包
$ go get github.com/go-playground/validator/v10
# 项目中引入包
import "github.com/go-playground/validator/v10"
校验语法:在字段tag上,也就是字段类型后面的`xxx`里内容,加上validate:“yyy”,其中yyy就是validate的校验语法;
校验方法:使用err := validate.Struct(u)进行校验,err是校验结果
结果输出:我们可以对err进行反射判断处理,可以获取字段名等信息,定制化输出校验结果
下面是一个简单示例:
import (
"fmt"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zhTrans "github.com/go-playground/validator/v10/translations/zh"
)
type User struct {
Name string
Age int `validate:"required,gte=18,lte=55"`
Email string `validate:"required,email"`
}
func ValidTestSimple() {
u := &User{
Name: "tt",
Age: 12,
Email: "abcde@gmail",
}
validSimple := validator.New()
err := validSimple.Struct(u)
if err != nil {
for _, e := range err.(validator.ValidationErrors) {
fmt.Printf(e.String())
fmt.Println()
}
} else {
fmt.Println("validate success!")
}
}
func main() {
ValidTestSimple()
}
让我们看看输出
Key: 'User.Age' Error:Field validation for 'Age' failed on the 'gte'