Валидация данных в Go с помощью go-playground/validator
В современной разработке на Go (Golang) валидация входящих данных — это критически важный этап обработки запросов, форм или конфигураций. Библиотека go-playground/validator является де-факто стандартом для проверки структур, полей и сложных вложенных объектов. Она предоставляет мощный набор правил (тегов) для валидации, поддерживает кастомные сообщения об ошибках, интернационализацию и интеграцию с веб-фреймворками.
Зачем нужна валидация данных?
Ручная проверка каждого поля приводит к дублированию кода и ошибкам. validator позволяет описать правила прямо в тегах структуры, что делает код чистым, декларативным и легко поддерживаемым. Вы можете проверять типы, диапазоны, обязательность полей, форматы (email, URL, UUID) и даже выполнять кросс-полевые сравнения.
Установка
Для установки библиотеки выполните команду в терминале (требуется Go 1.18+):
go get github.com/go-playground/validator/v10Затем импортируйте пакет в свой код:
import "github.com/go-playground/validator/v10"Основные функции
- Теги валидации:
required,min,max,len,email,url,uuid,oneofи десятки других. - Кастомные валидаторы: создание собственных правил через
RegisterValidation. - Вложенные структуры: проверка полей внутри вложенных объектов.
- Сообщения об ошибках: переводы на разные языки, кастомизация текста.
- Пакетная валидация: проверка массивов и слайсов.
Пример кода на Go (Golang)
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
// User представляет структуру с тегами валидации
type User struct {
Name string `validate:"required,min=2,max=50"`
Email string `validate:"required,email"`
Age int `validate:"gte=0,lte=130"`
Role string `validate:"required,oneof=admin user guest"`
}
func main() {
validate := validator.New()
user := User{
Name: "A",
Email: "invalid-email",
Age: 200,
Role: "superadmin",
}
err := validate.Struct(user)
if err != nil {
for _, err := range err.(validator.ValidationErrors) {
fmt.Printf("Поле '%s' не прошло валидацию: %s\n", err.Field(), err.Tag())
}
} else {
fmt.Println("Данные валидны!")
}
}Когда использовать go-playground/validator?
Эта библиотека идеально подходит для любых проектов на Go, где требуется надежная проверка входных данных: REST API (вместе с Gin, Echo, Chi), обработка форм, конфигурационные файлы, парсинг CSV/JSON. Особенно она полезна в микросервисной архитектуре, где каждый сервис должен гарантировать корректность данных на входе.
Если вам нужна быстрая, гибкая и расширяемая валидация без написания тонны условных операторов — go-playground/validator станет вашим лучшим выбором.