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 multipartWalidacja 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
- Router Gin i grupy tras
- Wiązanie żądań i walidacja
- Pomocnicze funkcje odpowiedzi i kody statusu
- Middleware Gin: uwierzytelnianie i logowanie