• golang validator基于map规则验证集合和结构体


    validator基于map规则验证集合和结构体

    validator可以基于map规则进行集合的校验以及结构体的校验,同时支持嵌套校验

    主要函数

    • validate.ValidateMap(map, rules)

      验证集合

    • validate.RegisterStructValidationMapRules(structType, Data{})

      验证结构体

    集合验证
    package validate
    
    import (
        "fmt"
        "log"
    )
    
    // 集合验证
    func ValidateMap() {
        user := map[string]interface{} {
            "name": "hdddccccc",
            "emain": "hddd@google.com",
        }
    
        rules := map[string]interface{} {
            "name": "required,min=8,max=15",
            "email": "omitempty,email",
        }
    
        err := validate.ValidateMap(user, rules)
        if err != nil {
            fmt.Println(err)
        }
    
    }
    
    // 集合嵌套验证
    func ValidateNestedMap() {
        data := map[string]interface{} {
            "name": "ddkalsj",
            "email": "djsta@as.com",
            "details": map[string]interface{}{
                "contact_address": map[string]interface{}{
                    "province": "湖南",
                    "city":     "长沙",
                },
                "age": 18,
                "phones": []map[string]interface{}{
                    {
                        "number": "11-111-1111",
                        "remark": "home",
                    },
                    {
                        "number": "22-222-2222",
                        "remark": "work",
                    },
                },
            },
        }
    
        rules := map[string]interface{}{
            "name":  "min=4,max=15",
            "email": "required,email",
            "details": map[string]interface{}{
                "contact_address": map[string]interface{}{
                    "province": "required",
                    "city":     "required",
                },
                "age": "numeric,min=18",
                "phones": map[string]interface{}{
                    "number": "required,min=4,max=32",
                    "remark": "required,min=1,max=32",
                },
            },
        }
    
        err := validate.ValidateMap(data, rules)
        if err != nil {
            log.Fatal(err)
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    结构体验证
    package validate
    
    import "fmt"
    
    // map规则于结构体中的应用
    type Data struct {
        Name    string
        Email   string
        Details *Details
    }
    type Details struct {
        ContactAddress *ContactAddress
        Age            uint8
        Phones         []*Phone
    }
    type ContactAddress struct {
        Province string
        City     string
    }
    type Phone struct {
        Number string
        Remark string
    }
    
    func ValidateStructNested() {
        data := Data{
            Name:  "kangkang",
            Email: "kangkang@edgg.com",
            Details: &Details{
                ContactAddress: &ContactAddress{
                    Province: "四川",
                    City:     "成都",
                },
                Age: 18,
                Phones: []*Phone{
                    {
                        Number: "11-111-1111",
                        Remark: "home",
                    },
                    {
                        Number: "22-2111-1111",
                        Remark: "work",
                    },
                },
            },
        }
        // map 字段验证规则
        dataRules := map[string]string{
            "Name":    "min=4,max=15",
            "Email":   "required,email",
            "Details": "required",
        }
    
        detailRules := map[string]string{
            "Age":            "number,min=18,max=130",
            "ContactAddress": "required",
            "Phones":         "required,min=1,dive",
        }
        contactAddressRules := map[string]string{
            "Province": "required",
            "City":     "required",
        }
        phoneRules := map[string]string{
            "Number": "required,min=4,max=32",
            "Remark": "required,min=1,max=32",
        }
    	// 注册对应结构体验证
        validate.RegisterStructValidationMapRules(dataRules, Data{})
        validate.RegisterStructValidationMapRules(detailRules, Details{})
        validate.RegisterStructValidationMapRules(contactAddressRules, ContactAddress{})
        validate.RegisterStructValidationMapRules(phoneRules, Phone{})
        err := validate.Struct(data)
        if err != nil {
            fmt.Println(err)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
  • 相关阅读:
    sh脚本中magisk下的/data/adb/service.d中不支持数组
    Node.js 模块化及npm概念介绍
    Java ME SDK 3.0
    log4j.xml的实用例子
    基于量子随机游走的图像加密算法
    【嵌入式Linux内核驱动】内核模块三要素与验证测试
    通过浏览器打开某个应用程序
    springboot新冠疫苗预约管理系统毕业设计-附源码241530
    7.10飞书一面面经
    人力项目框架解析新增修改方法
  • 原文地址:https://blog.csdn.net/qq_43058348/article/details/133927006