0Pricing
Go Academy · Lekcja

Tworzenie serwera HTTP

ListenAndServe, HandlerFunc i ServeMux

Tworzenie serwera HTTP to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 1 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.

Pakiet net/http

Biblioteka standardowa Go, net/http, zapewnia serwer HTTP/1.1 i HTTP/2 gotowy do zastosowań produkcyjnych, bez zewnętrznych zależności.

Podstawowy serwer

Zarejestruj handler za pomocą http.HandleFunc i rozpocznij nasłuchiwanie za pomocą http.ListenAndServe:

http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))

Interfejs http.Handler

Każdy typ implementujący ServeHTTP(ResponseWriter, *Request) jest interfejsem http.Handler. Użyj go w przypadku stanowych handlerów zawierających bazę danych lub konfigurację.

type App struct{ db *sql.DB }

func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    // use a.db
}

ServeMux

http.NewServeMux() tworzy izolowany router. Przekaż go do http.ListenAndServe, aby uniknąć globalnego domyślnego muxa, co jest bezpieczniejsze w bibliotekach.

mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)

Zwracanie kodów statusu

Zapisz kod statusu za pomocą w.WriteHeader(code) przed zapisaniem treści odpowiedzi. Jeśli wywołasz tylko w.Write, domyślny status będzie wynosić 200.

w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))

Zapisywanie odpowiedzi JSON

Ustaw Content-Type przed zapisaniem treści odpowiedzi, a następnie zakoduj ją za pomocą json.Encoder:

w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)

Odczytywanie żądania

Za pośrednictwem struktury *Request uzyskasz dostęp do metody, adresu URL, nagłówków, parametrów zapytania i treści żądania.

r.Method          // "GET", "POST", ...
r.URL.Path        // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")

Parsowanie treści żądania JSON

Zdekoduj treść żądania za pomocą json.Decoder. Ogranicz rozmiar treści za pomocą http.MaxBytesReader, aby zapobiec wyczerpaniu pamięci.

r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)

Konfiguracja serwera

Skonfiguruj limity czasu za pomocą własnego http.Server, aby zapobiec atakom z użyciem powolnych klientów:

srv := &http.Server{
    Addr:         ":8080",
    Handler:      mux,
    ReadTimeout:  5 * time.Second,
    WriteTimeout: 10 * time.Second,
    IdleTimeout:  120 * time.Second,
}
srv.ListenAndServe()

HTTPS

Użyj srv.ListenAndServeTLS(certFile, keyFile), aby udostępniać HTTPS. Certyfikaty mogą być samopodpisane (w środowisku programistycznym) albo pochodzić z Let's Encrypt (w środowisku produkcyjnym za pośrednictwem golang.org/x/crypto/acme/autocert).

Kompozycja handlerów

Opakowuj handlery, aby dodawać przekrojowe funkcje, takie jak logowanie, uwierzytelnianie i odzyskiwanie po błędach, bez modyfikowania logiki biznesowej. Po modyfikacji zwróć kolejny handler.

Szybkie sprawdzenie

Dlaczego należy ustawić ReadTimeout i WriteTimeout w http.Server?

Podsumowanie: tworzenie serwera HTTP

Najważniejsze informacje:

  • HandleFunc + ListenAndServe do tworzenia prostych serwerów
  • Własny http.Server z limitami czasu w środowisku produkcyjnym
  • ServeMux do izolowanego routingu
  • json.NewEncoder(w) do odpowiedzi JSON

Często zadawane pytania

Czy lekcja „Tworzenie serwera HTTP” jest bezpłatna?

Tak — pełny tekst „Tworzenie serwera HTTP” 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 „Tworzenie serwera HTTP”?

ListenAndServe, HandlerFunc i ServeMux Ć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 1 z 4.

Ile czasu zajmuje lekcja „Tworzenie serwera HTTP”?

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. Tworzenie serwera HTTP
  2. Routing i parametry ścieżek
  3. Wzorzec middleware
  4. Kontrolowane zamykanie
← Powrót do Go Academy