怎样快速提升网站权重,湖州市吴兴区建设局网站,晋城网站建设价格,闵行区邮编使用 validator 以后#xff0c;只需要在定义结构体时使用binding或validatetag标识相关校验规则#xff0c;就可以进行参数校验了#xff0c;而不用自己单独去写常见的校验规则。
main.go
package mainimport (fmtgithub.com/go-playground/validator/…使用 validator 以后只需要在定义结构体时使用binding或validatetag标识相关校验规则就可以进行参数校验了而不用自己单独去写常见的校验规则。
main.go
package mainimport (fmtgithub.com/go-playground/validator/v10github.com/go-playground/locales/zh_Hans_CNunTrans github.com/go-playground/universal-translatorzhTrans github.com/go-playground/validator/v10/translations/zh
)type User struct {Username string validate:min6,max10,containsook,startswithHeAge uint8 validate:gte1,lte10Sex string validate:oneoffemale maleEmail string validate:email
}func main() {validate : validator.New()//user : User{Username: Heooking, Age: 6, Sex: male, Email: testqq.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 testgo 1.17require (github.com/go-playground/validator/v10 v10.15.0
)require (github.com/gabriel-vasile/mimetype v1.4.2 // indirectgithub.com/go-playground/locales v0.14.1 // indirectgithub.com/go-playground/universal-translator v0.18.1 // indirectgithub.com/leodido/go-urn v1.2.4 // indirectgolang.org/x/crypto v0.7.0 // indirectgolang.org/x/net v0.8.0 // indirectgolang.org/x/sys v0.6.0 // indirect
)常用约束如下
字符串约束
excludesall不包含参数中任意的 UNICODE 字符例如excludesallabexcludesrune不包含参数表示的 rune 字符excludesruneasongstartswith以参数子串为前缀例如startswithhiendswith以参数子串为后缀例如endswithbye。contains包含参数子串例如containsemailcontainsany包含参数中任意的 UNICODE 字符例如containsanyabcontainsrune包含参数表示的 rune 字符例如containsruneasongexcludes不包含参数子串例如excludesemail
范围约束 范围约束的字段类型分为三种
对于数值我们则可以约束其值对于切片、数组和map我们则可以约束其长度对于字符串我们则可以约束其长度
常用 tag 介绍
ne不等于参数值例如 ne5gt大于参数值例如 gt5gte大于等于参数值例如 gte50lt小于参数值例如 lt50lte小于等于参数值例如 lte50oneof只能是列举出的值其中一个这些值必须是数值或字符串以空格分隔如果字符串中有空格将字符串用单引号包围例如 oneofmale female。eq等于参数值注意与 len不同。对于字符串 eq约束字符串本身的值而 len约束字符串长度。例如 eq10len等于参数值例如 len10max小于等于参数值例如 max10min大于等于参数值例如 min10Fields约束eqfield定义字段间的相等约束用于约束同一结构体中的字段。例如 eqfieldPasswordeqcsfield约束统一结构体中字段等于另一个字段相对确认密码时可以使用例如 eqfielConfirmPasswordnefield用来约束两个字段是否相同确认两种颜色是否一致时可以使用例如 nefieldColor1necsfield约束两个字段是否相同相对
常用约束
unique指定唯一性约束不同类型处理不同 对于mapunique约束没有重复的值 对于数组和切片unique没有重复的值 对于元素类型为结构体的碎片unique约束结构体对象的某个字段不重复使用 uniquefield指定字段名
email使用email来限制字段必须是邮件形式直接写eamil即可无需加任何指定。omitempty字段未设置则忽略-跳过该字段不检验|使用多个约束只需要满足其中一个例如rgb|rgbarequired字段必须设置不能为默认值