首页 > 其他分享 >golang校验结构体字段的库validator的使用

golang校验结构体字段的库validator的使用

时间:2022-12-02 16:14:43浏览次数:65  
标签:www cn 体字 golang validator https com

package scripts_stroage

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

// 参考博客:
// https://juejin.cn/post/6900375680358285325
// https://www.cnblogs.com/jiujuan/p/13823864.html

type VIPUser struct {
    // 1 <= len <= 20,不能为空
    Name string `json:"name" validate:"required,min=1,max=20"`
    // 18 <= age <= 80
    Age int `json:"age" validate:"required,min=18,max=80"`
    // 1<= len <= 64
    Email string `json:"email" validate:"min=1,max=64"`
}

func TestTV1(t *testing.T) {
    // 0:
    vip0 := VIPUser{
        Name:  "naruto",
        Age:   22,
        Email: "[email protected]",
    }
    va0 := validator.New()
    err0 := va0.Struct(vip0)
    if err0 != nil {
        fmt.Println("err0: ", err0) // 输入合法没有打印
    }

    // 1:
    vip1 := VIPUser{
        Name:  "whw",
        Email: "[email protected]",
    }
    va1 := validator.New()
    err1 := va1.Struct(vip1)
    if err1 != nil {
        fmt.Println("err1: ", err1) // err1:  Key: 'VIPUser.Age' Error:Field validation for 'Age' failed on the 'required' tag
    }

    // 2:
    vip2 := VIPUser{
        Name:  "rrrrrrrrrrrrrrrrrrrrrrr", // name不合法
        Age:   23,
        Email: "", // email不合法
    }
    va2 := validator.New()
    err2 := va2.Struct(vip2)
    if err2 != nil {
        fmt.Println("err2: ", err2)
        /*
            err2:  Key: 'VIPUser.Name' Error:Field validation for 'Name' failed on the 'max' tag
            Key: 'VIPUser.Email' Error:Field validation for 'Email' failed on the 'min' tag
        */
    }

    // 3:
    vip3 := VIPUser{
        Name:  "whw",
        Age:   555, // age不合法
        Email: "[email protected]",
    }
    va3 := validator.New()
    err3 := va3.Struct(vip3)
    if err3 != nil {
        fmt.Println("err3: ", err3) // err3:  Key: 'VIPUser.Age' Error:Field validation for 'Age' failed on the 'max' tag
    }

}
参考博客:
https://juejin.cn/post/6900375680358285325
https://www.cnblogs.com/jiujuan/p/13823864.html

 

标签:www,cn,体字,golang,validator,https,com
From: https://www.cnblogs.com/paulwhw/p/16944737.html

相关文章

  • golang选择排序
    选择排序:每一轮迭代选择出一个最小的数,然后做一次交换元素。不用像冒泡排序那样需要交换元素那么频繁。不过也是效率比较槽糕。原理介绍:{4,7,3,10,1,8,19}第一轮迭代,从第一......
  • 【Golang】数据库使用
    非结构化方式获取数据库结果动态列获取结果https://github.com/go-sql-driver/mysql/wiki/Examples#rawbytes......
  • Golang语言算术运算符教程
    语法运算符说明范例结果+正号+55-负号-5-5+加法运算符3+58-减法运算符5-32*乘法运算符5*315/除法运算符10/33%取模10%31++自增运算符a=2,a++3--自减运算符a=2;a--1+字符串连......
  • golang二分查找算法
    一、条件:一组数据要进行二分查找,那么这个要查找的元素是有序,并且是连续存放(数组)。这样才可以进行二分查找。在数据库主键查找,二分查找算法是底层算法原理。二、下面用golang......
  • 8.golang语言学习,运算符介绍
    1.算术运算自增,自减,只能单独使用,++,--只能写在变量后面2.赋值运算符优先级,单目运算,赋值运算从右到左运算,其余从左到右,无三目运算,用if实现3.比较运算符/关系4.......
  • golang的jsonrpc客户端通用写法
    服务端packagemainimport( "errors" "fmt" "log" "net" "net/rpc" "net/rpc/jsonrpc" "os")//算数运算结构体typeArithstruct{}//算数运算请求结......
  • golang 模拟byte数组
    packagemainimport("fmt")typeBytes[]bytefuncmain(){ fmt.Println("hello") fmt.Println("--------------") //ascii字符=============================......
  • 7.golang语言学习,标识符的命名规范
    1.凡是自己可以命名的都是标识符2.命名规则a.由26个英文字母,数字0-9,_组成b.不能数字开头c.严格区分大小写d.不能包含空格e.下划线”_“本身在go......
  • 安装golang
    golang,本节目标为安装golang,并完成helloworld系统环境为win11,下载地址安装后检查版本PSC:\Users\pc>go.exeversiongoversiongo1.19.3windows/amd64设置国内......
  • golang 标准库log的封装
    都知道golang的log库可以拿来就用,但对于生产来说还不够,需要基于log库做点封装。除了这些还有其他问题,比如打印字段定制化,性能问题。本文不讨论太多,只对log进行简单封装,实现......