在验证用户传递来的参数时,可以用gin框架的数据验证,可以不用解析数据,减少if else,会简洁许多。如下:

package mainimport ("fmt""time""github.com/gin-gonic/gin"
)//Person ..
type Person struct {//不能为空并且大于10Age      int       `form:"age" binding:"required,gt=10"`Name     string    `form:"name" binding:"required"`Birthday time.Time `form:"birthday" time_format:"2006-01-02" time_utc:"1"`
}func main() {r := gin.Default()r.GET("/5lmh", func(c *gin.Context) {var person Personif err := c.ShouldBind(&person); err != nil {c.String(500, fmt.Sprint(err))return}c.String(200, fmt.Sprintf("%#v", person))})r.Run()
}

也可以自定义验证函数验证:

第一步,编写验证函数,如:

第二步:注册自定义函数到Validate;

第三步:绑定到要验证的字段。

实例代码如下:

package mainimport ("net/http""reflect""github.com/gin-gonic/gin""github.com/gin-gonic/gin/binding""gopkg.in/go-playground/validator.v8"
)/*对绑定解析到结构体上的参数,自定义验证功能比如我们要对 name 字段做校验,要不能为空,并且不等于 admin ,类似这种需求,就无法 binding 现成的方法需要我们自己验证方法才能实现 官网示例(https://godoc.org/gopkg.in/go-playground/validator.v8#hdr-Custom_Functions)这里需要下载引入下 gopkg.in/go-playground/validator.v8
*/
type Person struct {Age int `form:"age" binding:"required,gt=10"`// 2、在参数 binding 上使用自定义的校验方法函数注册时候的名称Name    string `form:"name" binding:"NotNullAndAdmin"`Address string `form:"address" binding:"required"`
}// 1、自定义的校验方法
func nameNotNullAndAdmin(v *validator.Validate, topStruct reflect.Value, currentStructOrField reflect.Value, field reflect.Value, fieldType reflect.Type, fieldKind reflect.Kind, param string) bool {if value, ok := field.Interface().(string); ok {// 字段不能为空,并且不等于  adminreturn value != "" && !("5lmh" == value)}return true
}func main() {r := gin.Default()// 3、将我们自定义的校验方法注册到 validator中if v, ok := binding.Validator.Engine().(*validator.Validate); ok {// 这里的 key 和 fn 可以不一样最终在 struct 使用的是 keyv.RegisterValidation("NotNullAndAdmin", nameNotNullAndAdmin)}/*curl -X GET "http://127.0.0.1:8080/testing?name=&age=12&address=beijing"curl -X GET "http://127.0.0.1:8080/testing?name=lmh&age=12&address=beijing"curl -X GET "http://127.0.0.1:8080/testing?name=adz&age=12&address=beijing"*/r.GET("/5lmh", func(c *gin.Context) {var person Personif e := c.ShouldBind(&person); e == nil {c.String(http.StatusOK, "%v", person)} else {c.String(http.StatusOK, "person bind err:%v", e.Error())}})r.Run()
}

gin框架下参数的自定义验证小示例相关推荐

  1. 关于将struts2框架下,使自定义过滤器对部分的action(一个action或多个action)请求忽略的方法

    关于将struts2框架下,使自定义过滤器对部分的action请求忽略的方法 首先需要了解一个方法 request.getServletPath() 他将返回一个当前请求的路径的醉详细名称 例如对路径 ...

  2. SSM框架下实现验证码图片验证功能(源码)

    SSM框架下实现验证码图片验证功能 背景图片资源路径 https://download.csdn.net/download/hero_qhz/10322064 一.首先,在pom里面加上需要用的资源j ...

  3. Enterprise Library +Caliburn.Micro+WPF CM框架下使用企业库验证,验证某一个属性,整个页面的文本框都变红的原因...

    我用的是CM这个框架做的WPF,在用企业库的验证的时候,我用标签的方式给一个属性加了不能为空的验证,但整个页面的所有控件的外面框都变红了.原因是CM框架的绑定方式是直接X:Name="你的属 ...

  4. Spring MVC 自定义验证器示例

    在任何 spring web mvc 应用程序中,我们经常必须处理表单.应用程序首先显示一个表单,然后用户填写该表单并将其提交给服务器.在服务器上,应用程序需要捕获表单输入并处理输入(例如,存储在数据 ...

  5. Go Gin框架请求自动验证和数据绑定,看完这篇就会用了

    之前做项目基本上公司是用 gRPC 和 echo 这两个框架的组合,后来 Gin 框架在Go圈越来越流行,陆续我在公司接触到的项目也开始有人用 Gin 框架开发了. 因为我也是偶尔开发,像Gin框架里 ...

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

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

  7. 关于微信小程序wepy框架下wx-charts的使用

    wx-charts在微信小程序wepy框架下的使用 wx-charts 微信小程序主流的图表工具 基于 Canvas,体积小 支持图表类型 饼图 pie 圆环图 ring 线图 line,scroll ...

  8. go+vue——基于gin框架和gorm的web开发实战

    go+vue--基于gin框架和gorm的web开发实战 gin框架 视频.资料.笔记 安装Go环境, 添加环境变量(可能自动添加好) 下载 Go 环境变量 goland 报错: GOROOT is ...

  9. Gin框架使用Zap接收日志

    前言 日志对于项目重要性不言而喻,如果用过Gin框架大家都知道,Gin框架中自带日志logger:可以文件和控制台输出,但性能和功能远不如Zap. 一.Gin使用默认日志中间件 下面简单写个例子 fu ...

  10. 在Qt Designer中使用自定义Widgets小部件

    在Qt Designer中使用自定义Widgets 在Qt Designer中使用自定义Widgets 处理自定义Widgets小部件 推广Widgets小部件 用户定义的自定义小部件 在Qt Des ...

最新文章

  1. 10 个神奇的网站显示超强的 HTML5 技术
  2. ESXi上的固态硬盘识别为非SSD
  3. GridView中实现单选RadioButton
  4. LeetCode 508. Most Frequent Subtree Sum
  5. 文巾解题 1816. 截断句子
  6. python startswith
  7. Linux下画原理图和PCB
  8. ntop linux,Linux下开源监控软件Ntop的性能提升方案
  9. java捕捉了异常_java 异常捕获与异常处理
  10. 一个电脑同时运行 64bit 和 32bit 的eclipse 如何匹配 jdk环境
  11. 「leetcode」738.单调递增的数字【贪心算法】详细讲解!
  12. NeurIPS 2021 | 医学图像生成新范式!在Noisy Data上训练出超越监督学习的模型
  13. PowerBI-关系函数-RELATED RELATEDTABLE
  14. Ubuntu上安装Chrome浏览器
  15. SpringCloud狂神说学习笔记(一)
  16. DirectAdmin安装Zend Optimizer
  17. Could not get a resource since the pool is exhausted
  18. C++ MFC日志Log类 棒棒的 控制台或文件或一起输出
  19. influxdb基础(五)——数据的备份与恢复(influxd backup/influxd restore)
  20. 2018 Android开发面试经历

热门文章

  1. 毕业有救了?!留美学生创造出了自动写论文的机器人!
  2. SAP BASIS ADM100 中文版 Unit 2(1)
  3. CSS3 animation动画 - 转风车、loding加载、人物走路等示例
  4. tenacity 报错_Python tenacity源码分析(一个专门用来做重试的库)v1.0
  5. STM8S003 AWU休眠唤醒 寄存器和库函数2种做法
  6. 模版之家第三方解析下载不用开年或终身会员也能下载
  7. 全国各地土特产一览表1
  8. 什么是d.ts文件,它是不是typescript文件?
  9. 什么是TypeScript
  10. php单元测试入门教程phpunit详解