Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go validator库

Go的gin参数校验中的validator库详解

作者:Looooking

这篇文章主要介绍了Go的gin参数校验之validator库,使用 validator 以后,只需要在定义结构体时使用 binding 或 validate tag标识相关校验规则,就可以进行参数校验了,而不用自己单独去写常见的校验规则,需要的朋友可以参考下

使用 validator 以后,只需要在定义结构体时使用 binding validate tag标识相关校验规则,就可以进行参数校验了,而不用自己单独去写常见的校验规则。

main.go

package main
import (
	"fmt"
	"github.com/go-playground/validator/v10"
	"github.com/go-playground/locales/zh_Hans_CN"
	unTrans "github.com/go-playground/universal-translator"
	zhTrans "github.com/go-playground/validator/v10/translations/zh"
)
type User struct {
	Username string `validate:"min=6,max=10,contains=ook,startswith=He"`
	Age      uint8  `validate:"gte=1,lte=10"`
	Sex      string `validate:"oneof=female male"`
	Email    string `validate:"email"`
}
func main() {
	validate := validator.New()
	//user := User{Username: "Heooking", Age: 6, Sex: "male", Email: "test@qq.com"}
	user := User{Username: "Looking", Age: 26, Sex: "male", Email: "qq.com"}
	err := validate.Struct(user)
	// 默认英文提示
	if err != nil {
		fmt.Println(err)
		//Key: 'User.Username' Error:Field validation for 'Username' failed on the 'startswith' tag
		//Key: 'User.Age' Error:Field validation for 'Age' failed on the 'lte' tag
		//Key: 'User.Email' Error:Field validation for 'Email' failed on the 'email' tag
	}
	fmt.Println()
	// 中文错误提示
	uni := unTrans.New(zh_Hans_CN.New())
	trans, _ := uni.GetTranslator("zh_Hans_CN")
	zhTrans.RegisterDefaultTranslations(validate, trans)
	if err != nil {
		for _, v := range err.(validator.ValidationErrors) {
			fmt.Println(v.Translate(trans))
			//Username必须以文本'He'开头
			//Age必须小于或等于10
			//Email必须是一个有效的邮箱
		}
	}
}

go.mod

module test
go 1.17
require (
	github.com/go-playground/validator/v10 v10.15.0
)
require (
	github.com/gabriel-vasile/mimetype v1.4.2 // indirect
	github.com/go-playground/locales v0.14.1 // indirect
	github.com/go-playground/universal-translator v0.18.1 // indirect
	github.com/leodido/go-urn v1.2.4 // indirect
	golang.org/x/crypto v0.7.0 // indirect
	golang.org/x/net v0.8.0 // indirect
	golang.org/x/sys v0.6.0 // indirect
)

常用约束如下:

字符串约束

范围约束

范围约束的字段类型分为三种:

常用 tag 介绍:

常用约束

对于map,unique约束没有重复的值
        对于数组和切片,unique没有重复的值
        对于元素类型为结构体的碎片,unique约束结构体对象的某个字段不重复,使用 unique=field指定字段名

到此这篇关于Go的gin参数校验之validator库的文章就介绍到这了,更多相关Go validator库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文