Golang 数据验证validator

背景

在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说明

字段说明
eqEquals 等于 包括了数值 string,slice,map的长度 下同
gteGreater than or equal 大于等于
lteLess Than or Equal 小于等于
urlURL String url格式
ipInternet Protocol Address IP ip格式
emailE-mail String 邮箱格式
lenLength 长度 包括string slice map等
maxMaximum 字符串最大长度
minMinimum 字符串最小长度
requiredRequired 必填项
gtefieldField Greater Than or Equal To Another Field 大于等于其他字段
ltefieldLess Than or Equal To Another Field 小于等于其他字段
nefieldField Does Not Equal Another Field 不等于其他字段
eqfieldField Equals Another Field 等于其他字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值