This commit is contained in:
2023-01-15 00:21:08 +08:00
commit 0fdfb59809
15 changed files with 1374 additions and 0 deletions

69
myvalidator/validator.go Normal file
View 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)
}

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

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