0Pricing
Go Academy · Lekcja

Wiązanie żądań i walidacja

ShouldBindJSON, tagi binding i validator

Wiązanie żądań i walidacja to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Wiązanie treści żądania

Gin może wiązać dane JSON, XML, formularzy i ciągów zapytania ze strukturami Go za pomocą tagu struktury binding oraz funkcji c.ShouldBind*:

type CreateUserRequest struct {
    Name  string `json:"name"  binding:"required"`
    Email string `json:"email" binding:"required,email"`
    Age   int    `json:"age"   binding:"gte=0,lte=150"`
}

func createUser(c *gin.Context) {
    var req CreateUserRequest
    if err := c.ShouldBindJSON(&req); err != nil {
        c.JSON(400, gin.H{"error": err.Error()})
        return
    }
}

ShouldBind a MustBind

ShouldBind* zwraca błąd, aby można było go samodzielnie obsłużyć. Bind* (wariant Must) automatycznie wysyła odpowiedź 400 i przerywa przetwarzanie w razie błędu — używaj ShouldBind, aby definiować niestandardowe odpowiedzi błędów.

Wiązanie parametrów zapytania

Powiąż parametry ciągu zapytania ze strukturą za pomocą c.ShouldBindQuery:

type ListRequest struct {
    Page  int `form:"page"  binding:"gte=1"`
    Limit int `form:"limit" binding:"gte=1,lte=100"`
}
var q ListRequest
c.ShouldBindQuery(&q)

Wiązanie parametrów ścieżki

Powiąż parametry ścieżki ze strukturą za pomocą c.ShouldBindUri:

type IDParam struct {
    ID int64 `uri:"id" binding:"required,gt=0"`
}
var p IDParam
c.ShouldBindUri(&p)

Tagi walidacji

Gin korzysta z github.com/go-playground/validator/v10. Typowe tagi to: required, email, min, max, gte, lte, len, oneof.

Niestandardowe walidatory

Zarejestruj niestandardową funkcję walidującą za pomocą binding.Validator.Engine():

validate := binding.Validator.Engine().(*validator.Validate)
validate.RegisterValidation("username", validateUsername)

Odpowiedź na błąd walidacji

Przekształć błędy walidatora w czytelną dla użytkownika odpowiedź zawierającą nazwy pól i komunikaty:

var ve validator.ValidationErrors
if errors.As(err, &ve) {
    errs := make([]string, len(ve))
    for i, e := range ve {
        errs[i] = fmt.Sprintf("%s: %s", e.Field(), e.Tag())
    }
    c.JSON(400, gin.H{"errors": errs})
}

Pliki formularza multipart

Obsługuj przesyłanie plików za pomocą c.FormFile:

file, _ := c.FormFile("avatar")
c.SaveUploadedFile(file, "./uploads/"+file.Filename)

Negocjowanie Content-Type

ShouldBind w Gin automatycznie wybiera sposób wiązania na podstawie Content-Type (JSON dla application/json, formularz dla application/x-www-form-urlencoded).

Maksymalny rozmiar treści żądania

Ogranicz rozmiar treści żądania, aby zapobiec wyczerpaniu pamięci:

r.MaxMultipartMemory = 8 << 20 // 8 MiB for multipart

Walidacja zagnieżdżonych struktur

Walidacja jest wykonywana rekurencyjnie dla zagnieżdżonych struktur. Użyj dive, aby walidować elementy wycinka:

Tags []string `json:"tags" binding:"required,dive,min=1,max=30"`

Szybkie sprawdzenie

Czym różnią się c.ShouldBindJSON i c.BindJSON w Gin?

Podsumowanie: wiązanie żądań

Najważniejsze informacje:

  • ShouldBindJSON/ShouldBindQuery/ShouldBindUri do typowanego wiązania danych
  • Tagi binding:"required,email,gte=0" za pośrednictwem go-playground/validator
  • Niestandardowe walidatory za pośrednictwem binding.Validator.Engine()
  • Analizuj ValidationErrors, aby uzyskać komunikaty błędów dotyczące poszczególnych pól

Często zadawane pytania

Czy lekcja „Wiązanie żądań i walidacja” jest bezpłatna?

Tak — pełny tekst „Wiązanie żądań i walidacja” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wiązanie żądań i walidacja”?

ShouldBindJSON, tagi binding i validator Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Wiązanie żądań i walidacja”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Router Gin i grupy tras
  2. Wiązanie żądań i walidacja
  3. Pomocnicze funkcje odpowiedzi i kody statusu
  4. Middleware Gin: uwierzytelnianie i logowanie
← Powrót do Go Academy