Validator в Go: полный курс по валидации структур
Каждая форма, каждый API-запрос и каждый конфиг нуждаются в проверке — и go-playground/validator стал стандартом экосистемы: он встроен в Gin, Echo и Fiber, его синтаксис тегов встречается в половине Go-проектов на GitHub.
Курс закрывает библиотеку целиком: теги required/min/max/email/oneof, вложенные структуры и dive для срезов, условные теги, свои функции-валидаторы и StructLevel, человекочитаемые сообщения на русском, интеграция с Gin и Echo, DTO-границы API, валидация конфигов и тесты. Каждый урок — код с построчным разбором, интерактивные задания и честные грабли (забытый nil-чек, дважды зарегистрированный тег).
Чему научитесь
Чему научитесь
- Валидировать структуры тегами binding и validate
- Понимать ValidationErrors и писать понятные сообщения
- Работать с вложенностью, срезами и картами через dive
- Писать свои функции-валидаторы и StructLevel-правила
- Интегрировать валидацию в Gin, Echo и chi
- Тестировать правила и держать один экземпляр validate
Для кого курс
- Backend-разработчикам, принимающим данные от пользователей
- Тем, кто видел binding:"required" в Gin, но не знает всей мощи
- Командам, стандартизирующим обработку ошибок API
Что понадобится
- Базовый синтаксис Go: структуры, теги, ошибки
- Желательно любой HTTP-фреймворк курса — интеграции покажем на них
Программа курса: 25 уроков
- 1Знакомство: зачем валидация всегда нужнаДырявые API, мусор в базе и цена ручных if.~16 мин · validator go, зачем валидация golang
- 2Установка и первая валидацияgo get, validator.New, Validate() и nil против ошибок.~18 мин · go-playground validator установка, validator new
- 3Теги required, min, maxОбязательность, длины и диапазоны на примере формы.~18 мин · validator required tag, min max валидация
- 4Форматы: email, url, uuid, datetimeПроверка форматов без регулярок руками.~18 мин · validator email tag, validator uuid
- 5ValidationErrors: что именно сломалосьField(), Tag(), Param(): разбор структуры ошибки.~18 мин · validationerrors go, validator field tag
- 6Русские сообщения об ошибкахСвои тексты для тегов: от тупого «required» к человечности.~20 мин · сообщения валидации go, validator перевод
- 7Вложенные структуры: Validate рекурсиейАдрес внутри профиля: проверка всего дерева.~18 мин · вложенные структуры валидация, validator nested
- 8Срезы и карты: тег diveВалидация каждого элемента массива, unique.~20 мин · validator dive, валидация слайса go
- 9Условные теги: required_without, excluded_withЗависимости полей: если одно есть, другое обязательно.~20 мин · required_without, условная валидация go
- 10Свой валидатор-функцияRegisterValidation: тег «телефон» и «не из чёрного списка».~20 мин · registervalidation, кастомный валидатор go
- 11StructLevel: правила на всю структуруКросс-польные проверки: пароль и подтверждение.~20 мин · structlevel validation, validator structlevel
- 12Валидация в Gin: bindingShouldBindJSON, ShouldBindUri и ошибки по-человечески.~18 мин · gin binding validation, gin validator
- 13Echo, chi и свой Validation-хукПодмена валидатора фреймворка своей настройкой.~18 мин · echo validation go, chi валидация
- 14Один экземпляр на приложениеКэш структур, thread-safety и цена New.~16 мин · validator singleton, экземпляр validate
- 15Нормализация перед валидациейTrimSpace, lower-case: чистим до проверок.~16 мин · нормализация данных go, trim перед валидацией
- 16DTO: границы API и внутренние моделиПочему нельзя валидировать домен и как разделять слои.~20 мин · dto api go, слои валидации
- 17Валидация JSON-запросовСырой JSON против структур: ошибки до Unmarshal.~18 мин · валидация json go, json запросы валидация
- 18Валидация конфигов с ViperПорты, таймауты и env: конфиг тоже проверяем.~18 мин · валидация конфига go, viper validator
- 19Тесты правил: таблицы кейсовТабличные тесты: каждый тег — проверен.~18 мин · тесты валидации go, table driven tests
- 20Производительность: цена рефлексииКэш структур, горячие пути, когда валидация дорога.~16 мин · validator производительность, валидация hot path
- 21Антипаттерны валидацииif err == nil везде, дубли правил, магия в тегах.~18 мин · антипаттерны валидации, ошибки валидации go
- 22ПДн и 152-ФЗ: что проверять обязательноТелефоны, email, паспорта: правила и честные ответы.~18 мин · 152-фз валидация, пдн формы go
- 23Бизнес-правила против теговЧто нельзя выразить тегом: баланс, лимиты, возраст.~20 мин · бизнес правила валидация, сложная валидация go
- 24Единый формат ошибок API400 с деталями: поле, тег, сообщение — как у больших.~20 мин · формат ошибок api, 400 bad request go
- 25Итоговый проект: регистрационная формаПолный цикл: DTO, теги, сообщения, тесты, API.~24 мин · validator проект, валидация формы golang
Вопросы о курсе
Почему validator, а не ручные if?
Ручные проверки расползаются по коду и дублируются между хендлерами. Теги описывают правила у поля, а один вызов Validate() проверяет всё дерево — в курсе есть урок с ценой каждого подхода.
Код запускается в песочнице?
Библиотечный код разбирается построчно в браузере, а принципы валидации — обязательность, формат, диапазоны — отрабатываются на интерактивах и тематических программах песочницы на чистом Go.
Подходит ли курс для Fiber и chi?
Да. Validator — библиотека без привязки к фреймворку: отдельные уроки показывают Gin и Echo, а приёмы одинаково работают в Fiber, chi и любом роутере.