背景
在web应用中会碰到各种字段的校验 比如用户名 密码 邮箱等
如果按流程顺序校验 代码会很长而且很难看
这里可以使用validator包 来帮助对字段的校验
记录一下 备忘
使用
下载包
go get github.com/go-playground/validator/v10
package main
import (
"fmt"
validator "gopkg.in/go-playground/validator.v9"
)
type User struct {
Name string `validate:"required,min=1,max=16"`
NickName string `validate:"required,min=0,max=16"`
Age int `validate:"required,gte=0,lte=130"`
Email string `validate:"required,email"`
PassWord string `validate:"required,min=6,max=16"`
RepeatPass string `validate:"eqfield=Password"`
}
func main() {
var user = User{
Name: "Bob",
NickName: "B",
Age: 10,
Email: "1@qq.com",
PassWord: "123456789",
RepeatPass: "123456798",
}
var validate = validator.New()
err := validate.Struct(&user)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
fmt.Println("Namespace:", err.Namespace())
fmt.Println("Field:", err.Field())
fmt.Println("StructNamespace:", err.StructNamespace())
fmt.Println("StructField:", err.StructField())
fmt.Println("Tag:", err.Tag())
fmt.Println("ActualTag:", err.ActualTag())
fmt.Println("Kind:", err.Kind())
fmt.Println("Type:", err.Type())
fmt.Println("Value:", err.Value())
fmt.Println("Param:", err.Param())
fmt.Println()
}
}
}
/** output
Namespace: User.RepeatPass
Field: RepeatPass
StructNamespace: User.RepeatPass
StructField: RepeatPass
Tag: eqfield
ActualTag: eqfield
Kind: string
Type: string
Value: 123456798
Param: Password
**/
git地址:https://github.com/go-playground/validator
部分标签说明 详细可以参考git说明
字段 | 说明 |
---|---|
eq | Equals 等于 包括了数值 string,slice,map的长度 下同 |
gte | Greater than or equal 大于等于 |
lte | Less Than or Equal 小于等于 |
url | URL String url格式 |
ip | Internet Protocol Address IP ip格式 |
E-mail String 邮箱格式 | |
len | Length 长度 包括string slice map等 |
max | Maximum 字符串最大长度 |
min | Minimum 字符串最小长度 |
required | Required 必填项 |
gtefield | Field Greater Than or Equal To Another Field 大于等于其他字段 |
ltefield | Less Than or Equal To Another Field 小于等于其他字段 |
nefield | Field Does Not Equal Another Field 不等于其他字段 |
eqfield | Field Equals Another Field 等于其他字段 |