Pourquoi context.Context existe
Annulation et gestion du cycle de vie des requêtes
Pourquoi context.Context existe 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.
Le problème
Sans mécanisme pour annuler un travail en cours, une requête lente vers une base de données ou un appel HTTP bloque sa goroutine jusqu’à son achèvement, gaspillant des ressources lorsque la requête d’origine a déjà été abandonnée.
Présentation de context.Context
context.Context est une interface qui transporte un signal d’annulation, une échéance facultative et des métadonnées clé-valeur entre les limites des API et les goroutines.
type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key any) any
}Le canal Done
ctx.Done() renvoie un canal qui est fermé lorsque le Context est annulé ou arrive à expiration. Les goroutines l’utilisent dans une instruction select pour détecter l’annulation.
select {
case result := <-workCh:
return result, nil
case <-ctx.Done():
return nil, ctx.Err()
}context.Background()
context.Background() est le Context racine : il n’est jamais annulé, n’a pas d’échéance et ne transporte aucune valeur. Utilisez-le au début d’une requête, dans main ou dans les tests.
context.TODO()
context.TODO() est également un Context racine non annulable, utilisé comme espace réservé lorsque le Context approprié n’est pas encore disponible. Il indique clairement l’intention aux personnes qui relisent le code.
Pourquoi transmettre Context comme premier argument ?
Par convention, le premier paramètre de toute fonction pouvant être annulée est ctx context.Context. Cela rend l’annulation explicite et facile à repérer dans les API.
func FetchUser(ctx context.Context, id int) (*User, error) {
return db.QueryContext(ctx, "SELECT ...", id)
}L’annulation se propage
L’annulation d’un Context parent annule tous les Context enfants qui en dérivent. Cela permet à un seul appel d’annulation d’arrêter tout un arbre de goroutines et d’opérations.
Ce que Context n’est pas
Context n’est pas un conteneur de valeurs à usage général : utilisez-le uniquement pour des données liées à la requête, comme des identifiants de trace ou des jetons d’authentification, et non pour des paramètres facultatifs. Conservez les valeurs dans des structures typées.
Intégration à la bibliothèque standard
Le client HTTP de la bibliothèque standard, le pilote SQL, gRPC et de nombreux paquets tiers acceptent un Context, ce qui permet à l’annulation de se propager dans toute la pile d’appels.
Stocker Context dans une structure
Ne stockez pas un Context dans une structure. Transmettez-le explicitement comme argument de fonction. Le stocker rend la durée de vie de l’annulation opaque et entraîne souvent des erreurs.
Context est immuable
Un Context est immuable : vous dérivez de nouveaux Context en les enveloppant avec WithCancel, WithDeadline, WithTimeout ou WithValue. Le parent n’est pas modifié.
Vérification rapide
Que renvoie ctx.Done() ?
Récapitulatif : context.Context
Points essentiels :
- Transporte l’annulation, l’échéance et les métadonnées entre les goroutines
- Transmettez-le comme premier argument ; ne le stockez jamais dans des structures
- Le canal ctx.Done() se ferme en cas d’annulation ou d’expiration
- L’annulation se propage du parent à tous les enfants
Questions Fréquemment Posées
La leçon « Pourquoi context.Context existe » est-elle gratuite ?
Oui — le texte complet de « Pourquoi context.Context existe » 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 « Pourquoi context.Context existe » ?
Annulation et gestion du cycle de vie des requêtes 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 « Pourquoi context.Context existe » ?
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
- Pourquoi context.Context existe
- WithCancel et WithTimeout
- WithDeadline et WithValue
- Context dans les appels HTTP et de base de données