go 同一个参数传入不同struct_Go 每日一库之 validator:Go最优秀的验证库

简介

今天我们来介绍一个非常实用的库——validatorvalidator用于对数据进行校验。在 Web 开发中,对用户传过来的数据我们都需要进行严格校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。

快速使用

先安装:

$ go get gopkg.in/go-playground/validator.v10

后使用:

package main

import (
  "fmt"

  "gopkg.in/go-playground/validator.v10"
)

type User struct {
  Name string `validate:"min=6,max=10"`
  Age  int    `validate:"min=1,max=100"`
}

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

  u1 := User{Name: "lidajun", Age: 18}
  err := validate.Struct(u1)
  fmt.Println(err)

  u2 := User{Name: "dj", Age: 101}
  err = validate.Struct(u2)
  fmt.Println(err)
}

validator在结构体标签(struct tag)中定义字段的约束。使用validator验证数据之前,我们需要调用validator.New()创建一个验证器,这个验证器可以指定选项、添加自定义约束,然后通过调用它的Struct()方法来验证各种结构对象的字段是否符合定义的约束。

在上面代码中,我们定义了一个结构体UserUser有名称Name字段和年龄Age字段。通过minmax约束,我们设置Name的字符串长度为[6,10]之间,Age的范围为[1,100]

第一个对象NameAge字段都满足约束,故Struct()方法返回nil错误。第二个对象的Name字段值为dj,长度 2,小于最小值minAge字段值为 101,大于最大值max,故返回错误:

<nil>
Key: 'User.Name' Error:Field validation for 'Name' failed on the 'min' tag
Key: 'User.Age' Error:Field validation for 'Age' failed on the 'max' tag

错误信息比较好理解,User.Name违反了min约束,User.Age违反了max约束,一眼就能看出问题所在。

注意:

  • validator已经更新迭代了很多版本,当前最新的版本是v10,各个版本之间有一些差异,大家平时在使用和阅读代码时要注意区分。我这里使用最新的版本v10作为演示版本;
  • 字符串长度和数值的范围都可以通过minmax来约束。

约束

validator提供了非常丰富的约束可供使用,下面依次来介绍。

范围约束

我们上面已经看到了使用minmax来约束字符串的长度或数值的范围,下面再介绍其它的范围约束。范围约束的字段类型有以下几种:

  • 对于数值,则约束其值;
  • 对于字符串,则约束其长度;
  • 对于切片、数组和map,则约束其长度。

下面如未特殊说明,则是根据上面各个类型对应的值与参数值比较。

  • len:等于参数值,例如len=10
  • max:小于等于参数值,例如max=10
  • min:大于等于参数值,例如min=10
  • eq:等于参数值,注意与len不同。对于字符串,eq约束字符串本身的值,而len约束字符串长度。例如eq=10
  • ne:不等于参数值,例如ne=10
  • gt:大于参数值,例如gt=10
  • gte:大于等于参数值,例如gte=10
  • lt:小于参数值,例如lt=10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值