zoukankan      html  css  js  c++  java
  • 26.用户注册场景:数据验证(1):第三方验证库、自定义错误信息

    image-20200103135002447

    编写一个简单的例子来理解一下validator验证器

    package main
    
    import (
        "fmt"
        "gopkg.in/go-playground/validator.v9"
        "micro/AppLib"
    )
    
    type Users struct {
        Username string `validate:"required"`
        Userpwd  string `validate:"required,min=6,max=18" vmsg:"验证密码必须6位以上"` //这里的vmsg是随便定义的,待会需要用我们自定义的函数去解析他,只要你高兴定义abc都可以
    }
    
    func main() {
        user := Users{Username: "xiahualou", Userpwd: "123"}
        valid := validator.New() //新建一个验证器
        err := valid.Struct(&user) //传入结构体校验字段
        if err != nil {
            if errs, ok := err.(validator.ValidationErrors); ok {
                for _, e := range errs { //errors是一个错误类型的切片
                    fmt.Println(e.Value())
                    fmt.Println(e.Field())
                    fmt.Println(e.Tag())
                    AppLib.GetValidMsg(user,e.Field()) //调用我们自定义的函数去输出更好的日志信息
                }
            }
        }
    }
    

    使用反射的方法,自定义错误输出

    package AppLib
    
    import (
        "fmt"
        "reflect"
    )
    
    func GetValidMsg(obj interface{}, field string) {
        getObj := reflect.TypeOf(obj) //tag要使用reflect.Type去获取
        if f, exist := getObj.Elem().FieldByName(field); exist {
            fmt.Println(f.Tag.Get("vmsg"))
        }
    
    }




  • 相关阅读:
    手撕RPC框架
    关于JVM的一些冷知识
    luoguP2627 修剪草坪
    [USACO16OPEN]248
    luoguP1171 售货员的难题
    luoguP2016 战略游戏
    luoguP2422 良好的感觉
    POJ1160 [IOI2000]Post Office
    luoguP2015 二叉苹果树
    BZOJ1756 小白逛公园
  • 原文地址:https://www.cnblogs.com/hualou/p/12144687.html
Copyright © 2011-2022 走看看