golang Gin Validator以及翻译校验
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
golang Gin - validator验证
前言
个人学习Gin 的记录,只作为记录,如果能帮助到别人,也希望为新手提供一些经验
提示:以下是本篇文章正文内容,下面案例可供参考
一、validator使用
go get github.com/go-playground/validator
(gin框架 不用下载)
二、使用步骤
1.引入库
2.读入数据
代码如下(示例):
package mainimport ("net/http""github.com/gin-gonic/gin"
)type SignUpParam struct {Age uint8 `json:"age" binding:"gte=1,lte=130"`Name string `json:"name" binding:"required"`Email string `json:"email" binding:"required,email"`Password string `json:"password" binding:"required"`RePassword string `json:"re_password" binding:"required,eqfield=Password"`
}func main() {r := gin.Default()r.POST("/signup", func(c *gin.Context) {var u SignUpParamif err := c.ShouldBind(&u); err != nil {c.JSON(http.StatusOK, gin.H{"msg": err.Error(),})return}// 保存入库等业务逻辑代码...c.JSON(http.StatusOK, "success")})_ = r.Run(":8999")
}
输出结果:
{“msg”:“Key: ‘SignUpParam.Email’ Error:Field validation for ‘Email’ failed on the ‘email’ tag\nKey: ‘SignUpParam.Password’ Error:Field validation for ‘Password’ failed on the ‘required’ tag\nKey: ‘SignUpParam.RePassword’ Error:Field validation for ‘RePassword’ failed on the ‘required’ tag”}
2.翻译校验错误提示信息
validator库本身是支持国际化的,借助相应的语言包可以实现校验错误提示信息的自动翻译。下面的示例代码演示了如何将错误提示信息翻译成中文,翻译成其他语言的方法类似。
代码如下(示例):
package main
import ("fmt""net/http""github.com/gin-gonic/gin""github.com/gin-gonic/gin/binding""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"
)// 定义一个全局翻译器T
var trans ut.Translator// InitTrans 初始化翻译器
func InitTrans(locale string) (err error) {// 修改gin框架中的Validator引擎属性,实现自定制if v, ok := binding.Validator.Engine().(*validator.Validate); ok {zhT := zh.New() // 中文翻译器enT := en.New() // 英文翻译器// 第一个参数是备用(fallback)的语言环境// 后面的参数是应该支持的语言环境(支持多个)// uni := ut.New(zhT, zhT) 也是可以的uni := ut.New(enT, zhT, enT)// locale 通常取决于 http 请求头的 'Accept-Language'var ok bool// 也可以使用 uni.FindTranslator(...) 传入多个locale进行查找trans, ok = uni.GetTranslator(locale)if !ok {return fmt.Errorf("uni.GetTranslator(%s) failed", locale)}// 注册翻译器switch locale {case "en":err = enTranslations.RegisterDefaultTranslations(v, trans)case "zh":err = zhTranslations.RegisterDefaultTranslations(v, trans)default:err = enTranslations.RegisterDefaultTranslations(v, trans)}return}return
}type SignUpParam struct {Age uint8 `json:"age" binding:"gte=1,lte=130"`Name string `json:"name" binding:"required"`Email string `json:"email" binding:"required,email"`Password string `json:"password" binding:"required"`RePassword string `json:"re_password" binding:"required,eqfield=Password"`
}func main() {if err := InitTrans("zh"); err != nil {fmt.Printf("init trans failed, err:%v\n", err)return}r := gin.Default()r.POST("/signup", func(c *gin.Context) {var u SignUpParamif err := c.ShouldBind(&u); err != nil {// 获取validator.ValidationErrors类型的errorserrs, ok := err.(validator.ValidationErrors)if !ok {// 非validator.ValidationErrors类型错误直接返回c.JSON(http.StatusOK, gin.H{"msg": err.Error(),})return}// validator.ValidationErrors类型错误则进行翻译c.JSON(http.StatusOK, gin.H{"msg":errs.Translate(trans),})return}// 保存入库等具体业务逻辑代码...c.JSON(http.StatusOK, "success")})_ = r.Run(":8999")
}
golang Gin Validator以及翻译校验相关推荐
- [golang gin框架] 29.Gin 商城项目-用户登录,注册操作
一.用户登录,注册界面展示说明 先看登录,注册界面以及相关流程,再根据流程写代码,一般网站的登录,注册功能都会在一个页面进行操作,还有的是在几个页面进行操作,这里讲解在几个页面进行注册的操作,步骤如下 ...
- golang gin开发-配置微信公众号接口
文章目录 概要 整体架构流程 技术细节-服务端处理 接口参数 接口处理逻辑 详细代码(golang实现) 小结 概要 在配置微信公众号相关接口,方便后续业务接口配合微信公众号使用时,需要先通过微信公众 ...
- golang gin 服务器部署
文章目录 golang gin 服务器部署 前言 基本流程 1.build 项目 2.写执行脚本 run.sh 3.创建一个 service 配置文件 4.启动 5.配置反向代理和ssl证书 gola ...
- [golang gin框架] 27.Gin 商城项目-购物车
1.先来看一个问题 购物车数据保持到哪里? 1.购物车数据保存在本地 (cookie或者 redis缓存中),下面统一保存到cookie中,保存到redis中和cookie中逻辑步骤其实都是一样的 2 ...
- golang gin框架gorilla的websocket小案例
golang gin框架中gorilla的websocket案例 在gin框架下 导入包 "github.com/gorilla/websocket" r.GET("/t ...
- [golang gin框架] 24.Gin 商城项目-redis讲解以及操作
一.reids相关文章 Redis五种数据类型及其应用场景 REDIS中的缓存穿透,缓存击穿,缓存雪崩原因以及解决方案 redis实现用户签到,统计活跃用户,用户在线状态,用户留存率 [golang ...
- Golang Gin embed static 静态文件嵌入
Golang Gin embed 静态文件嵌入 需求 改进思路 a). Gin文档 静态资源嵌入 方案 b). Gin 自带方法 代码 效果 c). 改进 1. 自带http库做法 2. 查看gin ...
- [golang gin框架] 6.Gin GORM简介以及安装
介绍 GORM 是 Golang 的一个 orm 框架,简单说,ORM 就是通过实例对象的语法,完成关系型 数据库的操作的技术,是"对象-关系映射"(Object/Relation ...
- [golang gin框架] 4.自定义Model以及Gin 文件上传
一.Gin 中自定义 Model 关于 Model 如果应用非常简单的话,我们可以在 Controller 里面处理常见的业务逻辑,但是如果 有一个功能想在多个控制器.或者多个模板里面复用的话,那么就 ...
最新文章
- spring mvc DispatcherServlet详解之四---视图渲染过程
- rust(70)-条件表达式
- Play! Framework 系列(一):初探 play 框架
- 利刃 MVVMLight 1:MVVMLight介绍以及在项目中的使用
- java图片识别查看器模拟_[转载]windows照片查看器无法显示图片内存不足
- 90 % Java 程序员被误导的一个性能优化策略
- Java中不一致的操作会扩大规则
- sonyflake.go
- Python 基础 - Day 2 Learning Note - 字符转编码操作
- 如何在苹果Mac中使用聚焦搜索 NTFS 格式磁盘?
- PX4 git submodule时:Failed to recurse into submodule path 'src/modules/uavcan/libuavcan
- win7无法打开计算机共享文件夹,Win7共享文件夹无法访问怎么办
- layui菜鸟教程--乐字节前端
- CGB2108day17
- 苹果CMS、海洋CMS自动定时采集-可采集任意自定义指定资源
- PEP8中文翻译(转)
- CTF-MISC隐写总结
- CASIO—4500P计算器在公路工程测量中的应用
- 望帝春心托杜鹃 中望帝的由来~
- 昂达平板4.22系统,测试新移植的libiconv