Golang Go语言中gin项目中的结构体字段验证问题

Golang Go语言中gin项目中的结构体字段验证问题

在看一个 gin 项目的源码, 项目中使用了 gorm 语句, 和 beego 的 validation, 然后发现在定义的结构体中, 有几种不同的注释, 后面的注释有 json, form, gorm 和 valid, 想请教一下后面注释的验证功能属于哪个包的功能?或者是 go 的原生验证吗? 因为想查阅一下完整的验证, 不知道从何下手…

一:

type Article struct {
	TagID         int    `json:"tag_id" gorm:"index"`
	Desc          string `json:"desc"`
	Content       string `json:"content"`
}

二:

type AddTagForm struct {
	Name      string `form:"name" valid:"Required;MaxSize(100)"`
	CreatedBy string `form:"created_by" valid:"Required;MaxSize(100)"`
	State     int    `form:"state" valid:"Range(0,1)"`
}

三:

type auth struct {
	Username string `valid:"Required; MaxSize(50)"`
	Password string `valid:"Required; MaxSize(50)"`
}

四:

type Auth struct {
	ID       int    `gorm:"primary_key" json:"id"`
	Username string `json:"username"`
	Password string `json:"password"`
}

更多关于Golang Go语言中gin项目中的结构体字段验证问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

13 回复

反射 tag 看下 reflect 包

更多关于Golang Go语言中gin项目中的结构体字段验证问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Struct tags

可以用 gojsonschema 做参数检验

gin 文档有写是用另一个库的

json 是给标准库 encoding/json 用的
gorm 是给 gorm 用的
valid 不是很确定,beego 的吗? gin 也有,是用的 go-playground/validator/v10

请问什么意思啊。。

谁问意思是指点进去看定义吗?这个不能点进去。。

感谢回复,valid 应该是 beego 的 validation 包,还有一个 form 不知道是不是用的 gin…

https://www.jianshu.com/p/c7d5c1c8a2d8 看下 “ Person struct “ 的 ”validation“ 函数的代码

gin 封装了 validator 包, tag 里加 binding




很有用的资料, 非常感谢

在Golang的Gin项目中,结构体字段验证是一个常见且重要的需求。Gin本身并不直接提供验证功能,但你可以结合一些流行的验证库,如go-playground/validator,来实现这一功能。

以下是一个使用go-playground/validator进行结构体字段验证的基本步骤:

  1. 安装验证库: 使用go get命令安装go-playground/validator库。

    go get github.com/go-playground/validator/v10
    
  2. 定义结构体和标签: 在你的结构体字段上添加验证标签,如jsonvalidate等。

    type User struct {
        Email string `json:"email" validate:"required,email"`
        Age   int    `json:"age" validate:"gte=0,lte=130"`
    }
    
  3. 初始化验证器: 创建一个验证器实例,并注册自定义标签(如果有)。

    validate := validator.New()
    
  4. 执行验证: 使用验证器对结构体实例进行验证。

    err := validate.Struct(user)
    if err != nil {
        // 处理验证错误
        for _, err := range err.(validator.ValidationErrors) {
            fmt.Println(err.Field(), err.Tag())
        }
    }
    

通过以上步骤,你可以在Gin项目中轻松实现结构体字段的验证。这有助于确保输入数据的正确性,提高应用的健壮性。

回到顶部