如何实现golan参数校验Validator
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍如何实现golan参数校验Validator,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.实践go get github.com/go-playground
千家信息网最后更新 2025年01月20日如何实现golan参数校验Validator1.实践
1.1校验标签
1.2字符串约束
1.3自定义校验器
这篇文章主要介绍如何实现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:如果字段未设置,则疏忽它
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")}
附加:
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"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
参数
标签
字符
字段
成功
内容
字符串
篇文章
结构
校验器
应用
价值
信息
兴趣
前缀
后缀
多个
小伙
小伙伴
效果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库安全网关系统
关系数据库的关系有什么要求
黑色沙漠有移动服务器
政府使用计算机网络安全
网络安全状况月报
珠海精益管理软件开发
金蝶软件开发一个表多少钱
蔚蓝档案怎么看服务器
网络安全类专业高校排名
方直科技与中国互联网大会
个性化软件开发价格合理
论当今网络安全
软件开发实现流程图
web服务器一般注意哪些方面
csv 丢失数据库
天津质量软件开发科技
抖音软件开发成本
济南最大的软件开发公司
数据库和htap有什么区别
内蒙古数字化城管软件开发公司
数据库技术 - 百度
单片机采集传感器数据写入数据库
安徽新华互联网科技学校怎么样
swg网络安全
浙江信息化软件开发服务有哪些
ibm gpu服务器
服务器管理工具怎么用
学校网络安全教育漫画
网络安全问题防止趋势
位置管理服务器