Gin 验证可选指针是否为 uuid?

Dan*_*ial 4 validation go go-gin

我有这个结构

// CreateAccount Create Account Data Args
type CreateAccount struct {
    ....
    RegistrationID string  `example:"2c45e4ec-26e0-4043-86e4-c15b9cf985a2" json:"registration_id" binding:"max=63"`
    ParentID       *string `example:"7c45e4ec-26e0-4043-86e4-c15b9cf985a7" json:"parent_id" format:"uuid"`
}
Run Code Online (Sandbox Code Playgroud)

ParentID 是一个指针,并且它是可选的。但如果提供的话,它应该是uuid。

var params helper.CreateAccount
if err := ctx.ShouldBindJSON(&params); err != nil {
...
}
Run Code Online (Sandbox Code Playgroud)

如果将此添加到 ParentID binding:"uuid",则 ParentID 成为必填字段!这里的情况并非如此。当且仅当给出 ParentID 时,它才应该是 uuid。有没有办法这样设置。

bla*_*een 5

您必须omitempty先放置标签。

type CreateAccount struct {
    ....
    RegistrationID string  `json:"registration_id" binding:"max=63"`
    ParentID       *string `json:"parent_id" binding:"omitempty,uuid"`
}
Run Code Online (Sandbox Code Playgroud)

来自验证器文档

允许条件验证,例如,如果字段未设置值(由“必需”验证器确定),则其他验证(例如最小值或最大值)将不会运行

我读这句话的方式是,它omitempty必须放在其他句子之前,这样如果该值不等于零值,它就可以停止验证器链。