golang中使用validator进行数据校验及自定义翻译器

一、概述

在接口开发经常需要进行数据校验,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.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值