如何实现golan参数校验Validator
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍如何实现golan参数校验Validator,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.实践go get github.com/go-playground
千家信息网最后更新 2026年11月03日如何实现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安全错误
数据库的锁怎样保障安全
互联网科技公司
上海挚品互联网科技有限公司
科技互联网企业
互联网是不是新科技
互联网金融与金融科技
互联网金融 科技金融
礼当家互联网科技
互联网科技革命
远拓互联网科技
上海亿帐通互联网科技
互联网科技有限公司 翻译
新华互联网科技校企合作
汽车互联网创新科技园
宁夏众和广鑫互联网科技有限公司
广州市恰铎互联网科技有限公司
民营互联网公司国防科技
徐州市互联网科技有限公司
世界互联网科技成果奖
云南互联网科技学费
知域互联网科技有限公司官网
青岛互联网科技公司
嘟嘟瓜互联网科技
鑫亿盛互联网科技
九亚互联网科技
奔汉互联网科技
互联网科技视频素材
剑昆互联网络科技有限公司临桂
燊美集互联网科技有限公司
互联网在线教育科技创业
广州智享互联网科技