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
- Tworzenie serwera HTTP
- Routing i parametry ścieżek
- Wzorzec middleware
- Kontrolowane zamykanie