我正在使用这个库来验证我的 Go 结构。 https://pkg.go.dev/github.com/go-playground/validator/v10
如何仅在填充字段时验证字段?例如,我的结构之一中有一个可选的电话号码字段。如果用户提供了这个值,我想使用 E.164 格式验证它。
Phone string `validate:"e164"`
Run Code Online (Sandbox Code Playgroud)
我搜索了“可选”标签,但找不到。
nip*_*una 17
正如库文档中关于多个验证器所述,
一个字段上的多个验证器将按照定义的顺序进行处理。
正如@Flimzy 上面描述的,您可以使用omitempty来验证结构上的可选字段,但omitempty应该排在列表的第一位。否则,它会被验证并收到错误。
Phone string `validate:"omitempty,e164"`
Run Code Online (Sandbox Code Playgroud)
简单的代码证明如下,您可以在Playground上运行
package main
import (
"github.com/go-playground/validator/v10"
"log"
)
func main() {
sv := validator.New()
res := Response{}
err := sv.Struct(&res)
if err != nil {
log.Fatalln(err) // no error
}
res2 := Response2{}
err = sv.Struct(&res2)
if err != nil {
log.Fatalln(err) // error
}
}
type Response struct {
Phone string `validate:"omitempty,e164"`
}
type Response2 struct {
Phone string `validate:"e164,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)