来源:自学PHP网 时间:2020-10-21 10:40 作者:小飞侠 阅读:次
[导读] golang validator参数校验的实现...
今天带来golang validator参数校验的实现教程详解
今天在改后台页面,参数校验错误时输出全是英文,使用着很难看懂到底时什么错了 效果 从原来的Title is required变为标题为必填字段 完成后的代码: 这里主要定义了初始化了一个中文的trans和Validate的变量,并对其做初始化 注册了TagName函数 注册了validate的翻译函数 package service import ( zhongwen "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" "reflect" "strings" ) var Validate *validator.Validate var trans ut.Translator func init() { zh := zhongwen.New() uni := ut.New(zh, zh) trans, _ = uni.GetTranslator("zh") Validate = validator.New() Validate.RegisterTagNameFunc(func(field reflect.StructField) string { label := field.Tag.Get("label") if label == "" { return field.Name } return label }) zh_translations.RegisterDefaultTranslations(Validate, trans) } func Translate(errs validator.ValidationErrors) string { var errList []string for _, e := range errs { // can translate each error one at a time. errList = append(errList,e.Translate(trans)) } return strings.Join(errList,"|") } 调用方式 type ArticlesPost struct { Title string `json:"title" validate:"required,max=32,min=4" label:"标题"` } var ap ArticlePost err = service.Validate.Struct(ap) if err!=nil{ errStr =Translate(errs) fmt.Sprintln(errStr) } 思路
第一个是设置一个新的tag来替换validate,另一个的说明是注册一个方法来为结构体字段获取替换的名字 仔细看看说明,果然就是这个,在看看TagNameFunc的签名,参数是reflect.StructField,能够拿到tag等一系列信息 // TagNameFunc allows for adding of a custom tag name parser type TagNameFunc func(field reflect.StructField) string // SetTagName allows for changing of the default tag name of 'validate' func (v *Validate) SetTagName(name string) { v.tagName = name } // RegisterTagNameFunc registers a function to get alternate names for StructFields. // // eg. to use the names which have been specified for JSON representations of structs, rather than normal Go field names: // // validate.RegisterTagNameFunc(func(fld reflect.StructField) string { // name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0] // if name == "-" { // return "" // } // return name // }) func (v *Validate) RegisterTagNameFunc(fn TagNameFunc) { v.tagNameFunc = fn v.hasTagNameFunc = true } 至此,终于找到了正确的解决方案 总结 在这里发现为了解决这个问题走了很多弯路,查了一大堆资料才发现甚至原来就有提供该功能。 发现自己的几个问题:
到此这篇关于golang validator参数校验的实现的文章就介绍到这了,更多相关golang validator参数校验内容请搜索自学php网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学php网! 以上就是关于golang validator参数校验的实现全部内容,感谢大家支持自学php网。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com