如何在 Go Validator 中只接受多个字段之一?

Mus*_*nay 5 validation go

type CoolName struct {
    Foo string  `json:"foo"`
    Bar string  `json:"bar"`
}
Run Code Online (Sandbox Code Playgroud)

使用 Go 验证器,我只想将这两个字段之一设为必填,如果这两个字段的内容都已满,则给出错误。

我用过required_without,但它只对需要其中之一有帮助。我不知道如何验证两个字段是否同时没有内容。

xop*_*oww 3

我刚刚花了一些时间来解决同样的问题,但我似乎已经弄清楚了:

type CoolName struct {
    Foo string  `json:"foo" validate:"required_without=Bar,excluded_with=Bar"`
    Bar string  `json:"bar" validate:"required_without=Foo,excluded_with=Foo"`
}
Run Code Online (Sandbox Code Playgroud)

这确实有效,甚至还有一定道理。_with但是,我发现/标签上的文档_without有点误导:

仅当任何其他指定字段不存在时,验证字段必须存在且不为空。

对我来说,这意味着“字段必须存在 <=>(当且仅当)其他字段不存在”。