可选指针的 Gin 验证为 uuid?

Gin Validation for optional pointer to be uuid?

我有这个结构

// 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"`
}

ParentID为指针,可选。但是如果提供的话,应该是uuid。

var params helper.CreateAccount
if err := ctx.ShouldBindJSON(&params); err != nil {
...
}

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

您必须先放置 omitempty 标签。

type CreateAccount struct {
    ....
    RegistrationID string  `json:"registration_id" binding:"max=63"`
    ParentID       *string `json:"parent_id" binding:"omitempty,uuid"`
}

来自validator docs

Allows conditional validation, for example if a field is not set with a value (Determined by the "required" validator) then other validation such as min or max won't run

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