Обработка вложенной структуры в 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
Другие вопросы по тегам