Я просто нырнул в программирование Go, используя protobuf, и я нахожусь в точке, где мне нужно проверить данные в структуре. Я нашел govalidator, который, кажется, делает идеальную работу за то, что мне нужно. Он проверки структур на основе тегов поля, что-то вродеОбъявление тега поля в прото-сообщении
type Contact struct {
firstName string `valid:"alpha,required"`
lastName string `valid:"alpha,required"`
email string `valid:"email,required"`
}
jdoe := &Contact{
firstName: "John",
lastName: "Doe",
email: "[email protected]"
}
ok, err = govalidator.ValidateStruct(jdoe)
И мое определение Protobuf будет выглядеть
message Contact {
string firstName = 1;
string lastName = 2;
string email = 3;
}
Теперь мой вопрос будет, есть ли способ, чтобы определить поля метки в прото-сообщение. Из того, что я видел в сгенерированном коде go, компилятор все равно добавляет теги в поля, но могу ли я «прокрасть» те, которые мне тоже нужны? Кроме того, я бы предположил, что unmarshalling может быть одним из возможных решений, но мне почему-то кажется неэффективным, чтобы развязать просто для копирования значений полей в эквивалентную структуру, которая будет иметь необходимые теги полей.
Не уверен, какой 'valid:" alpha, required "' does, но предполагается ли это дубликат для 'lastName' и' firstName'? – RickyA
Это довольно распространенный шаблон, который имеет разную структуру для транспортировки сообщений (protobuf) и внутренней обработки данных. Иногда вы избегаете использования одного (обычно сообщения для обмена сообщениями), но, как видите, вы сталкиваетесь с проблемами, когда хотите получить разные вещи из своей внутренней структуры. Мой совет: сделайте другой для внутренних целей и скопируйте. – RickyA
@ RickyA да, предполагается, что он дублируется - это правила проверки 'govalidator'. А для второй части - это именно то, что я делаю в данный момент :-) Спасибо – Havelock