提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

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以及翻译校验相关推荐

  1. [golang gin框架] 29.Gin 商城项目-用户登录,注册操作

    一.用户登录,注册界面展示说明 先看登录,注册界面以及相关流程,再根据流程写代码,一般网站的登录,注册功能都会在一个页面进行操作,还有的是在几个页面进行操作,这里讲解在几个页面进行注册的操作,步骤如下 ...

  2. golang gin开发-配置微信公众号接口

    文章目录 概要 整体架构流程 技术细节-服务端处理 接口参数 接口处理逻辑 详细代码(golang实现) 小结 概要 在配置微信公众号相关接口,方便后续业务接口配合微信公众号使用时,需要先通过微信公众 ...

  3. golang gin 服务器部署

    文章目录 golang gin 服务器部署 前言 基本流程 1.build 项目 2.写执行脚本 run.sh 3.创建一个 service 配置文件 4.启动 5.配置反向代理和ssl证书 gola ...

  4. [golang gin框架] 27.Gin 商城项目-购物车

    1.先来看一个问题 购物车数据保持到哪里? 1.购物车数据保存在本地 (cookie或者 redis缓存中),下面统一保存到cookie中,保存到redis中和cookie中逻辑步骤其实都是一样的 2 ...

  5. golang gin框架gorilla的websocket小案例

    golang gin框架中gorilla的websocket案例 在gin框架下 导入包 "github.com/gorilla/websocket" r.GET("/t ...

  6. [golang gin框架] 24.Gin 商城项目-redis讲解以及操作

    一.reids相关文章 Redis五种数据类型及其应用场景 REDIS中的缓存穿透,缓存击穿,缓存雪崩原因以及解决方案 redis实现用户签到,统计活跃用户,用户在线状态,用户留存率 [golang ...

  7. Golang Gin embed static 静态文件嵌入

    Golang Gin embed 静态文件嵌入 需求 改进思路 a). Gin文档 静态资源嵌入 方案 b). Gin 自带方法 代码 效果 c). 改进 1. 自带http库做法 2. 查看gin ...

  8. [golang gin框架] 6.Gin GORM简介以及安装

    介绍 GORM 是 Golang 的一个 orm 框架,简单说,ORM 就是通过实例对象的语法,完成关系型 数据库的操作的技术,是"对象-关系映射"(Object/Relation ...

  9. [golang gin框架] 4.自定义Model以及Gin 文件上传

    一.Gin 中自定义 Model 关于 Model 如果应用非常简单的话,我们可以在 Controller 里面处理常见的业务逻辑,但是如果 有一个功能想在多个控制器.或者多个模板里面复用的话,那么就 ...

最新文章

  1. spring mvc DispatcherServlet详解之四---视图渲染过程
  2. rust(70)-条件表达式
  3. Play! Framework 系列(一):初探 play 框架
  4. 利刃 MVVMLight 1:MVVMLight介绍以及在项目中的使用
  5. java图片识别查看器模拟_[转载]windows照片查看器无法显示图片内存不足
  6. 90 % Java 程序员被误导的一个性能优化策略
  7. Java中不一致的操作会扩大规则
  8. sonyflake.go
  9. Python 基础 - Day 2 Learning Note - 字符转编码操作
  10. 如何在苹果Mac中使用聚焦搜索 NTFS 格式磁盘?
  11. PX4 git submodule时:Failed to recurse into submodule path 'src/modules/uavcan/libuavcan
  12. win7无法打开计算机共享文件夹,Win7共享文件夹无法访问怎么办
  13. layui菜鸟教程--乐字节前端
  14. CGB2108day17
  15. 苹果CMS、海洋CMS自动定时采集-可采集任意自定义指定资源
  16. PEP8中文翻译(转)
  17. CTF-MISC隐写总结
  18. CASIO—4500P计算器在公路工程测量中的应用
  19. 望帝春心托杜鹃 中望帝的由来~
  20. 昂达平板4.22系统,测试新移植的libiconv

热门文章

  1. 尚硅谷-Dubbo篇
  2. 文件方式实现完整的英文词频统计实例
  3. Qt 信号槽的应用(三)
  4. Visual Studio(VS)2013使用教程
  5. 区块链是什么?简单理解区块链
  6. ngx_waf 防火墙
  7. Vm linux虚拟机与本地宿主机互通
  8. PM4PY - BPMN support
  9. python 听歌识曲_Shazam听歌识曲算法解析+python实现-3 检索歌曲
  10. LPMS-B2 数据采集源码分析