Junior — Middle
Comment arrêter correctement l'exécution des goroutines en utilisant le contexte en Go?
sobes.tech IA
Réponse de l'IA
Pour arrêter correctement les goroutines en Go, on utilise souvent le package context. Un contexte avec possibilité d'annulation (context.WithCancel) est créé et passé à la goroutine. À l'intérieur de la goroutine, l'état du contexte est vérifié périodiquement via <-ctx.Done(). Lorsqu'on appelle la fonction d'annulation, le canal Done() se ferme, permettant à la goroutine de se terminer proprement.
Exemple:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine arrêtée")
return
default:
// effectuer le travail
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// après un certain temps, arrêter la goroutine
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // pour que la goroutine ait le temps de finir
}
Cette approche permet d'arrêter les goroutines de manière sûre et contrôlée sans utiliser de méthodes non sécurisées.