Реализация кастомного валидатора, похожего на 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.