go-playground/validator | Валидация данных в Go

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Валидация данных в 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 станет вашим лучшим выбором.

Рекомендаций