go库使用之:validator

package main

import (
	"fmt"
	"github.com/go-playground/validator/v10"
)

var validate *validator.Validate

func main() {
	validate = validator.New()

	validateMap()
	validateNestedMap()
}

func validateMap() {
	user := map[string]interface{}{"name": "Arshiya Kiani", "email": "zytel3301@gmail.com"}

	// Every rule will be applied to the item of the data that the offset of rule is pointing to.
	// So if you have a field "email": "omitempty,required,email", the validator will apply these
	// rules to offset of email in user data
	rules := map[string]interface{}{"name": "required,min=8,max=32", "email": "omitempty,required,email"}

	// ValidateMap will return map[string]error.
	// The offset of every item in errs is the name of invalid field and the value
	// is the message of error. If there was no error, ValidateMap method will
	// return an EMPTY map of errors, not nil. If you want to check that
	// if there was an error or not, you must check the length of the return value
	errs := validate.ValidateMap(user, rules)

	if len(errs) > 0 {
		fmt.Println(errs)
		// The user is invalid
	}

	// The user is valid
}

func validateNestedMap() {

	data := map[string]interface{}{
		"name":  "Arshiya Kiani",
		"email": "zytel3301@gmail.com",
		"details": map[string]interface{}{
			"family_members": map[string]interface{}{
				"father_name": "Micheal",
				"mother_name": "Hannah",
			},
			"salary": "1000",
			"phones": []map[string]interface{}{
				{
					"number": "11-111-1111",
					"remark": "home",
				},
				{
					"number": "22-222-2222",
					"remark": "work",
				},
			},
		},
	}

	// Rules must be set as the structure as the data itself. If you want to dive into the
	// map, just declare its rules as a map
	rules := map[string]interface{}{
		"name":  "min=4,max=32",
		"email": "required,email",
		"details": map[string]interface{}{
			"family_members": map[string]interface{}{
				"father_name": "required,min=4,max=32",
				"mother_name": "required,min=4,max=32",
			},
			"salary": "number",
			"phones": map[string]interface{}{
				"number": "required,min=4,max=32",
				"remark": "required,min=1,max=32",
			},
		},
	}

	if len(validate.ValidateMap(data, rules)) == 0 {
		// Data is valid
	}

	// Data is invalid
}

对于基本规则的校验

参考文章:Go 使用validator进行后端数据校验 - 掘金 (juejin.cn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值