Реализация кастомного валидатора, похожего на Validator v10
Реализована функция:
func Validate(v interface{}) error
Она валидирует публичные поля входной структуры на основе структурного тэга validate
.
Функция возвращает
- или программную ошибку, произошедшую во время валидации;
- или
ValidationErrors
- ошибку, являющуюся слайсом структур, содержащих имя поля и ошибку его валидации.
Если у поля нет структурных тэгов или нет тэга validate
, то функция игнорирует его.
Реализованы следующие валидаторы:
- Для строк:
len:32
- длина строки должна быть ровно 32 символа;regexp:\\d+
- согласно регулярному выражению строка должна состоять из цифр (\\
- экранирование слэша);in:foo,bar
- строка должна входить в множество строк {"foo", "bar"}.
- Для чисел:
min:10
- число не может быть меньше 10;max:20
- число не может быть больше 20;in:256,1024
- число должно входить в множество чисел {256, 1024};
- Для слайсов валидируется каждый элемент слайса.
Допускается комбинация валидаторов по логическому "И" с помощью |
, например:
min:0|max:10
- число должно находится в пределах [0, 10];regexp:\\d+|len:20
- строка должна состоять из цифр и иметь длину 20.