Créer un serveur HTTP
ListenAndServe, HandlerFunc et ServeMux
Créer un serveur HTTP est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.
Paquet net/http
La bibliothèque standard de Go, net/http, fournit un serveur HTTP/1.1 et HTTP/2 adapté à la production, sans dépendances externes.
Serveur de base
Enregistrez un gestionnaire avec http.HandleFunc et commencez à écouter avec http.ListenAndServe :
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, World!")
})
log.Fatal(http.ListenAndServe(":8080", nil))Interface http.Handler
Tout type qui implémente ServeHTTP(ResponseWriter, *Request) est un http.Handler. Utilisez-le pour les gestionnaires avec état qui intègrent une base de données ou une configuration.
type App struct{ db *sql.DB }
func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// use a.db
}ServeMux
http.NewServeMux() crée un routeur isolé. Transmettez-le à http.ListenAndServe pour éviter le mux global par défaut, ce qui est plus sûr dans les bibliothèques.
mux := http.NewServeMux()
mux.HandleFunc("/api/users", usersHandler)
http.ListenAndServe(":8080", mux)Répondre avec des codes d’état
Écrivez le code d’état avec w.WriteHeader(code) avant d’écrire le corps. Si vous appelez uniquement w.Write, le statut est 200 par défaut.
w.WriteHeader(http.StatusCreated)
w.Write([]byte("created"))Écrire des réponses JSON
Définissez Content-Type avant d’écrire le corps, puis encodez-le avec json.Encoder :
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(data)Lire la requête
Accédez à la méthode, à l’URL, aux en-têtes, aux paramètres de requête et au corps via la structure *Request.
r.Method // "GET", "POST", ...
r.URL.Path // "/api/users"
r.URL.Query().Get("id") // query param
r.Header.Get("Authorization")Analyser le corps JSON d’une requête
Décodez le corps de la requête avec json.Decoder. Limitez la taille du corps avec http.MaxBytesReader afin d’éviter l’épuisement de la mémoire.
r.Body = http.MaxBytesReader(w, r.Body, 1<<20)
var req CreateUserRequest
json.NewDecoder(r.Body).Decode(&req)Configuration du serveur
Configurez les délais d’attente avec un http.Server personnalisé afin de prévenir les attaques par client lent :
srv := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: 5 * time.Second,
WriteTimeout: 10 * time.Second,
IdleTimeout: 120 * time.Second,
}
srv.ListenAndServe()HTTPS
Utilisez srv.ListenAndServeTLS(certFile, keyFile) pour servir du HTTPS. Les certificats peuvent être auto-signés (développement) ou provenir de Let's Encrypt (production via golang.org/x/crypto/acme/autocert).
Composition des gestionnaires
Entourez les gestionnaires pour ajouter des préoccupations transversales (journalisation, authentification, récupération) sans modifier la logique métier. Retournez le gestionnaire suivant après la modification.
Vérification rapide
Pourquoi devez-vous définir ReadTimeout et WriteTimeout sur un http.Server ?
Récapitulatif : créer un serveur HTTP
Points clés :
- HandleFunc + ListenAndServe pour les serveurs simples
- http.Server personnalisé avec des délais d’attente pour la production
- ServeMux pour un routage isolé
- json.NewEncoder(w) pour les réponses JSON
Questions Fréquemment Posées
La leçon « Créer un serveur HTTP » est-elle gratuite ?
Oui — le texte complet de « Créer un serveur HTTP » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Créer un serveur HTTP » ?
ListenAndServe, HandlerFunc et ServeMux Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Go Academy ?
Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Créer un serveur HTTP » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?
Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Créer un serveur HTTP
- Routage et paramètres de chemin
- Modèle des intergiciels
- Arrêt progressif