如何实现golan参数校验Validator
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,这篇文章主要介绍如何实现golan参数校验Validator,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.实践go get github.com/go-playground
千家信息网最后更新 2025年11月17日如何实现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安全错误
数据库的锁怎样保障安全
数据库基础在线课程
学3g软件开发
帝都服务器
关系型数据库管理系统完善
服务器如何配管理口
平凉天气预报软件开发
数据库安全标准对用户的意义
树莓派游戏服务器
发生网络安全事件应当是什么
win7 存储服务器
某软件开发公司从一个
服务器ddos集成防护
一个管理与只能有一台服务器
软件开发方法与技术
条形码信息怎么录到数据库
语音视频软件开发多少钱
数据库开发工程师待遇怎么样
惠普服务器立着放可以么
小智网络安全简笔画手抄报
pc网易mc服务器怎么加材质
苏州天天尚鲜网络技术
欧若数据库
服务器配置wcf
平凉天气预报软件开发
金融数据库的特点
长春游戏软件开发工资待遇
网络安全预算不低于总预算
永城软件开发有限公司
数据库中blob类型怎么转换
问道服务器端