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"))
    }

}




猜你喜欢

转载自www.cnblogs.com/hualou/p/12144687.html