Обработка вложенной структуры в Go Validator.v2
Я использую Go Validator.v2 для проверки полей, и он элегантно работает с моими неструктурированными полями. Однако, когда дело доходит до обработки полей на основе структуры (в исходной структуре), никакой документации об этом нет. https://pkg.go.dev/mod/gopkg.in/validator.v2
Я знаю, что v10 поддерживает его, но я предпочитаю встроенную поддержку регулярных выражений в v2. Можно ли как-нибудь настроить проверку для этих полей на основе структуры? например
type user struct {
Name string `validate:"nonzero"`
Age int `validate:"min=21"`
BillingAddress *Address ???
}
Я хочу проверить поле BillingAddress, как показано выше, или я просто напишу теги проверки в модели Address, и она тоже будет автоматически проверять?
Спасибо, и любые указатели приветствуются!
2 ответа
Я настоятельно рекомендую использовать https://github.com/go-playground/validator. В go-Playground/validator/v10 есть много вариантов проверки.
Вы можете проверить пример уровня структуры для своего вопроса.
Пакет валидатора будет рекурсивно искать структуру. Просто убедитесь, что поля вложенной структуры не являются анонимными и имеютvalidate
ярлык.
Если вы обнаружите, что потеряли функциональность пакета, взгляните на их тестовые файлы, это может что-то раскрыть. Например, у пакета тестирования валидатора есть пример для вложенных структур здесь .
Пример:
package main
import (
"log"
"gopkg.in/validator.v2"
)
type Address struct {
Val string `validate:"nonzero"`
}
type User struct {
Name string `validate:"nonzero"`
Age int `validate:"min=21"`
BillingAddress *Address
}
func main() {
nur := User{Name: "something", Age: 21, BillingAddress: &Address{Val: ""}}
err := validator.Validate(&nur)
log.Fatal(err)
}
2022/11/10 10:32:43 BillingAddress.Val: zero value