下面是我拥有的代码
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
type PriorityLevel string
const (
high PriorityLevel = "P1"
medium PriorityLevel = "P2"
)
type OrdersPriority struct {
OrderID string `json:"order_id" validate:"required"`
Priority PriorityLevel `json:"priority" validate:"required"`
}
var validate *validator.Validate
func main() {
order := OrdersPriority{
OrderID: "Order_1",
Priority: "random_priority",
}
validate = validator.New()
err := validate.Struct(order)
fmt.Printf("%+v", err)
}如您所见,我的PriorityLevel应该只有high或medium值。如何使用validator强制执行此操作?
我知道在validate标记中,我可以提供“可能的”值,但是这个选项是不可伸缩的,也就是说,如果我最终向该常量添加更多的值,我也必须在那里进行更改。使用这个validator库,有没有更多的Go方法可以做到这一点?
发布于 2020-11-20 12:52:59
您可以使用eq并放入多个值,但以后将很难维护
package main
import (
"fmt"
v "github.com/go-playground/validator/v10"
)
type Abc struct {
A string `validate:"required,eq=public|eq=private"`
}
func main() {
fmt.Println("Hello, playground")
a := Abc{
A: "public",
}
b := Abc{
A: "private",
}
c := Abc{
A: "panda",
}
validator := v.New()
err := validator.Struct(a)
fmt.Printf("a %+v\n", err)
err = validator.Struct(b)
fmt.Printf("b %+v\n", err)
err = validator.Struct(c)
fmt.Printf("c %+v\n", err)
}对于您的用例,最好使用自定义的验证器函数,例如
validate.RegisterValidation(`mycustomvalidator`, func(fl validator.FieldLevel) bool {
str := fl.Param()
//Now you can check your custom validation here
return str == "abc"
})https://stackoverflow.com/questions/64923054
复制相似问题