一、概述
在接口开发经常需要进行数据校验,validator包是一个比较强大的校验工具包。下面是一些学习总结,全文使用gin框架进行讲解,详细内容可以查看validator
二、使用官方标记符进行数据效验
下面我以“required”进行代码演示,要查看更多标记符可以查看官方文档
导包
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/go-playground/locales/en"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
enTranslations "github.com/go-playground/validator/v10/translations/en"
zhTranslations "github.com/go-playground/validator/v10/translations/zh"
"net/http"
"reflect"
"regexp"
"strings"
)
定义全局键值对,可以方便取到验证器和翻译器,以及要翻译的语言
const (
ValidatorKey = "ValidatorKey"
TranslatorKey = "TranslatorKey"
locale = "zh"
)
初始化验证器和翻译器
func TransInit(c *gin.Context) {
//设置支持语言
chinese := zh.New()
english := en.New()
//设置国际化翻译器
uni := ut.New(chinese, chinese, english)
//设置验证器
val := validator.New()
//根据参数取翻译器实例
trans, _ := uni.GetTranslator(locale)
//翻译器注册到validator
switch locale {
case "chinese":
zhTranslations.RegisterDefaultTranslations(val, trans)
//使用fld.Tag.Get("comment")注册一个获取tag的自定义方法
val.RegisterTagNameFunc(func(fld reflect.StructField) string {
return fld.Tag.Get("comment")
})
case "english":
enTranslations.RegisterDefaultTranslations(val, trans)
val.RegisterTagNameFunc(func(fld reflect.StructField) string {
return fld.Tag.

最低0.47元/天 解锁文章
1219

被折叠的 条评论
为什么被折叠?



