一、Gin binding标签可对参数进行校验
type ReqGameData struct {
Uuid string `json:"uuid" binding:"required,min=16"`
X int `json:"x" binding:"required"`
Y int `json:"y" binding:"required"`
}
但是错误返回都是英文, 通过下方可进行"翻译"错误
想查看binding的具体的限制条件, 请查看:gin-binding参数校验
二、validator.go 翻译中文
package initialize
import (
"github.com/gin-gonic/gin/binding"
zh "github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
zh_translations "github.com/go-playground/validator/v10/translations/zh"
)
//gin > 1.4.0
//将验证器错误翻译成中文
var (
uni *ut.UniversalTranslator
Trans ut.Translator
)
func InitValidate() {
//注册翻译器
zhT := zh.New()
uni = ut.New(zhT, zhT)
Trans, _ = uni.GetTranslator("zh")
//获取gin的校验器
validate := binding.Validator.Engine().(*validator.Validate)
//注册翻译器
zh_translations.RegisterDefaultTranslations(validate, Trans)
}
// Translate 翻译错误信息
func Translate(err error) map[string][]string {
var result = make(map[string][]string)
errors := err.(validator.ValidationErrors)
for _, err := range errors {
result[err.Field()] = append(result[err.Field()], err.Translate(Trans))
}
return result
}
三、在gin接口中使用
func Move(c *gin.Context) {
var req form.ReqGameData
err := c.ShouldBind(&req)
if err != nil {
c.JSON(200, gin.H{
//在这里使用
"error": initialize.Translate(err),
"msg": "fail",
})
return
}
// xxxx
// xxxx
}