cinderguard
Схемы, правила и понятные ошибки для Go.
cinderguard — небольшая библиотека валидации для Go. Правила комбинируются, ошибки собираются списком, а не выбрасываются по одной, а сообщения готовы к показу пользователю.
go get github.com/cinderguardhq/cinderguard@latest
Пример
package main
import (
"context"
"fmt"
"log"
"github.com/cinderguardhq/cinderguard"
)
func main() {
ctx := context.Background()
v, err := cinderguard.New(cinderguard.Options{
AllowUnknown: false,
MaxErrors: 100,
})
if err != nil {
log.Fatal(err)
}
defer v.Close()
if err := v.Field(ctx, "email", "required|email"); err != nil {
log.Fatal(err)
}
items, err := v.Validate(ctx, []byte("{"email":"ada@example.com"}"))
if err != nil {
log.Fatal(err)
}
fmt.Println(items)
}
Возможности
- Вложенные данные. Проверка объектов, списков и словарей любой глубины.
- Без магии рефлексии. Схемы — обычные значения, которые можно читать, тестировать и передавать.
- Все ошибки сразу. Проверка не останавливается на первой проблеме — вы получаете полный список.
- Скорость. Схемы компилируются один раз и переиспользуются для каждого значения.
- Свои сообщения. Переопределите любое сообщение или переведите все разом.
- Пути к полям. У каждой ошибки есть путь вида
items[2].price.
Документация
УстановкаТребования, установка и сборка из исходников.
Первые шагиПервая программа и основные понятия.
ПримерыЗаконченные программы для типичных задач.
НастройкиВсе параметры, их типы и значения по умолчанию.
Справочник APIСигнатуры и поведение публичного API.
БенчмаркиБенчмарки и советы по скорости.
Решение проблемЧастые проблемы и их решения.
FAQКороткие ответы на частые вопросы.
Обновление версийКак переходить между мажорными версиями.
Список измененийИстория релизов.
Как помочь проектуКак собрать проект и отправить изменения.