init
This commit is contained in:
69
myvalidator/validator.go
Normal file
69
myvalidator/validator.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package myvalidator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/go-playground/locales/en"
|
||||
ut "github.com/go-playground/universal-translator"
|
||||
"github.com/go-playground/validator/v10"
|
||||
|
||||
//zhTranslations "github.com/go-playground/validator/v10/translations/zh"
|
||||
enTranslations "github.com/go-playground/validator/v10/translations/en"
|
||||
)
|
||||
|
||||
var (
|
||||
vt *validator.Validate
|
||||
trans ut.Translator
|
||||
)
|
||||
|
||||
func Init() {
|
||||
vt = validator.New()
|
||||
trans = RegisterTranslate(vt)
|
||||
}
|
||||
|
||||
func RegisterTranslate(v *validator.Validate) ut.Translator {
|
||||
//zhT := zh.New()
|
||||
enT := en.New()
|
||||
|
||||
uni := ut.New(enT, enT)
|
||||
tr, _ := uni.GetTranslator("en")
|
||||
_ = enTranslations.RegisterDefaultTranslations(v, tr)
|
||||
return tr
|
||||
}
|
||||
|
||||
// Verify 验证结构体
|
||||
func Verify(data interface{}) error {
|
||||
return vt.Struct(data)
|
||||
}
|
||||
|
||||
// VerifyTrans 验证结构体并翻译
|
||||
func VerifyTrans(data interface{}) error {
|
||||
return Trans(vt.Struct(data))
|
||||
}
|
||||
|
||||
func Trans(err error) error {
|
||||
return GetTransError(trans, err)
|
||||
}
|
||||
|
||||
// GetTransError 翻译错误信息
|
||||
func GetTransError(trans ut.Translator, err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var msg string
|
||||
|
||||
switch v := err.(type) {
|
||||
case validator.ValidationErrors:
|
||||
if len(v) > 0 {
|
||||
msg = v[0].Translate(trans)
|
||||
} else {
|
||||
msg = v.Error()
|
||||
}
|
||||
case validator.FieldError:
|
||||
msg = v.Translate(trans)
|
||||
default:
|
||||
msg = err.Error()
|
||||
}
|
||||
|
||||
return fmt.Errorf(msg)
|
||||
}
|
||||
22
myvalidator/validator_gin.go
Normal file
22
myvalidator/validator_gin.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package myvalidator
|
||||
|
||||
import (
|
||||
ut "github.com/go-playground/universal-translator"
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
var (
|
||||
ginTrans ut.Translator
|
||||
)
|
||||
|
||||
func InitGin(ginVt *validator.Validate) {
|
||||
//if vt2, ok := binding.Validator.Engine().(*validator.Validate); ok {
|
||||
// ginVt = vt2
|
||||
//}
|
||||
ginTrans = RegisterTranslate(ginVt)
|
||||
|
||||
}
|
||||
|
||||
func TransGin(err error) error {
|
||||
return GetTransError(ginTrans, err)
|
||||
}
|
||||
52
myvalidator/validator_test.go
Normal file
52
myvalidator/validator_test.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package myvalidator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestValidate(t *testing.T) {
|
||||
type St struct {
|
||||
Id int `validate:"gte=0,lte=500"`
|
||||
Name string `validate:"required"`
|
||||
}
|
||||
|
||||
values := []*St{
|
||||
{
|
||||
Id: 5,
|
||||
Name: "name5",
|
||||
},
|
||||
|
||||
{
|
||||
Id: 100,
|
||||
Name: "",
|
||||
},
|
||||
|
||||
{
|
||||
Id: 600,
|
||||
Name: "name600",
|
||||
},
|
||||
|
||||
{
|
||||
Id: -1,
|
||||
Name: "",
|
||||
},
|
||||
}
|
||||
|
||||
Init()
|
||||
|
||||
for _, v := range values {
|
||||
err := Verify(v)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
err = VerifyTrans(v)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
fmt.Printf("%+v\n\n", v)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user