我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何实现golan参数校验Validator

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何实现golan参数校验Validator

这篇文章主要介绍如何实现golan参数校验Validator,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1.实践

go get github.com/go-playground/validator/v10

定义结体:

type UserInfo struct { ID    int `validate:"gt=0"` Age   int `validate:"gt=0"` Name  string `validate:"required"` Sex   string `validate:"required"`}

初始化结构体并做参数校验:

func InitUserInfo(id,age int,name,sex string) *UserInfo { // new一个校验器 valid := validator.New() // 初始化UserInfo userInfo := &UserInfo{  ID: id,  Age: age,  Name:name,  Sex:sex, } if err := valid.Struct(userInfo);err != nil {  fmt.Println("参数校验不通过",err) } return userInfo}

效果:

InitUserInfo(1,2,"kevin","男")// 参数校验通过InitUserInfo(0,2,"kevin","男")// 参数校验不通过 Key: 'UserInfo.ID' Error:Field validation for 'ID' failed on the 'gt' tagInitUserInfo(1,2,"kevin","")// 参数校验不通过 Key: 'UserInfo.Sex' Error:Field validation for 'Sex' failed on the 'required' tag

如参数校验不通过,err中会包含不通过字段信息

1.1校验标签

-:跳过该字段,不测验;
|:应用多个束缚,只须要满足其中一个,例如rgb|rgba;
required:字段必须设置,不能为默认值;
omitempty:如果字段未设置,则疏忽它

如何实现golan参数校验Validator

如何实现golan参数校验Validator

1.2字符串约束

  • excludesall:不包含参数中任意的 UNICODE 字符,例如excludesall=ab

  • excludesrune:不包含参数表示的 rune 字符,excludesrune=asong

  • startswith:以参数子串为前缀,例如startswith=hi

  • endswith:以参数子串为后缀,例如endswith=bye

  • contains= :包含参数子串,例如contains=email

  • containsany:包含参数中任意的 UNICODE 字符,例如containsany=ab

  • containsrune:包含参数表示的 rune 字符,例如`containsrune=asong

  • excludes:不包含参数子串,例如excludes=email

1.3自定义校验器

在Gin中支持实现自定义校验标签

定义校验逻辑:

// sum不能大于10func VerifySum(level validator.FieldLevel) bool { if sum,ok := level.Field().Interface().(int);ok{  fmt.Println(sum)  if sum > 10 {   return false  }  return true } return false}

注册标签:

 // 注册 if v,ok := binding.Validator.Engine().(*validator.Validate); ok {  if err := v.RegisterValidation("sum",VerifySum);err != nil{   fmt.Println("参数校验标签注册失败")  }  fmt.Println("参数校验标签注册成功") }

应用标签到结构体上:

type TestSum struct { Sum int `binding:"sum"`}

测试:

func getSum(c *gin.Context) { var b TestSum b.Sum = cast.ToInt(c.Request.URL.Query().Get("sum")) // 数据模型绑定查询字符串验证 if err := c.ShouldBindWith(&b, binding.Query); err == nil {  c.JSON(http.StatusOK, gin.H{"message": "prams are valid!"}) } else {  c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) }}func main()  { route := gin.Default() // 注册 if v,ok := binding.Validator.Engine().(*validator.Validate); ok {  if err := v.RegisterValidation("sum",VerifySum);err != nil{   fmt.Println("参数校验标签注册失败")  }  fmt.Println("参数校验标签注册成功") } route.GET("/getSum", getSum) route.Run(":8080")}

如何实现golan参数校验Validator

如何实现golan参数校验Validator

附加:

Go中获取标签值是通过反射进行获取的:

  type TestSum struct {    Sum int `binding:"sum"`  }  // 获取标签值: var b TestSum b_type := reflect.TypeOf(b) fmt.Println(b_type.Field(0).Tag.Get("binding"))

以上是“如何实现golan参数校验Validator”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何实现golan参数校验Validator

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何实现golan参数校验Validator

这篇文章主要介绍如何实现golan参数校验Validator,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.实践go get github.com/go-playground/validator/v10定义结体:t
2023-06-22

golang validator库参数校验实用技巧有哪些

这篇“golang validator库参数校验实用技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“golang v
2023-06-30

Java如何实现优雅的参数校验

这篇文章主要介绍“Java如何实现优雅的参数校验”,在日常操作中,相信很多人在Java如何实现优雅的参数校验问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java如何实现优雅的参数校验”的疑惑有所帮助!接下来
2023-07-02

springmvc的validator数据校验的实现示例代码

一、什么是数据校验?这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验。数据校验分为客户端校验和服务端校验客户端校验:js校验服务端校验:springmvc使用v
2023-05-31

Python中rapidjson参数校验实现

目录前言rapidjson简介和安装rapidjson基本使用dumps() 方法skipkeysensure_asciisort_keysdump()方法Validator class前言在使用Django框架开发前后端分离的项目时,通常
2022-06-02

Spring WebFlux如何实现参数校验的示例代码

这篇文章主要为大家展示了“Spring WebFlux如何实现参数校验的示例代码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring WebFlux如何实现参数校验的示例代码”这篇文章吧。
2023-06-20

SpringBoot如何利用validation实现优雅的校验参数

这篇“SpringBoot如何利用validation实现优雅的校验参数”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spr
2023-07-02

springboot接口参数校验JSR303的实现

本文主要介绍了springboot接口参数校验JSR303的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

SpringBoot如何通过自定义注解实现参数校验

今天小编给大家分享一下SpringBoot如何通过自定义注解实现参数校验的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.
2023-07-04

SpringBoot中怎么实现请求参数校验

在Spring Boot中,可以使用JSR 303规范中的注解来实现请求参数的校验。具体步骤如下:在Controller类中的请求方法参数前添加校验注解,比如@Validated和@NotBlank等。@RestController@Re
SpringBoot中怎么实现请求参数校验
2024-03-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录