Middle
Qu'est-ce que le contexte en Go ? À quoi sert-il ? Comment fonctionne l'annulation par délai d'expiration ?
sobes.tech IA
Réponse de l'IA
En Go, context est un paquet et un concept pour gérer la durée de vie des opérations, transmettre des signaux d'annulation et définir des délais entre les goroutines.
Les principales tâches du contexte :
- Annuler des opérations (par exemple, en cas de délai d'expiration ou d'annulation par l'utilisateur),
- Transmettre des valeurs (par exemple, l'ID de la requête) à travers la chaîne d'appels,
- Définir des délais (timeouts).
L'annulation par délai d'expiration fonctionne ainsi :
- Un contexte avec un délai ou un timeout est créé, par exemple,
context.WithTimeout. - Lorsque le temps est écoulé, l'annulation du contexte est automatiquement appelée.
- La goroutine qui écoute ce contexte reçoit un signal d'annulation via le canal
Done(). - La goroutine doit gérer correctement l'annulation (par exemple, interrompre le travail et libérer les ressources).
Exemple :
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("opération terminée")
case <-ctx.Done():
fmt.Println("opération annulée ou expirée")
}
Ici, l'opération sera interrompue après 2 secondes si elle ne se termine pas plus tôt.