Junior — Middle
Comment arrêter l'exécution d'une goroutine si la valeur attendue n'a pas encore été atteinte?
sobes.tech IA
Réponse de l'IA
En Go, pour arrêter une goroutine qui attend une valeur, mais cette valeur peut ne pas arriver, on utilise généralement des canaux avec un délai d'attente ou un contexte avec annulation.
Exemple avec délai d'attente via select et time.After :
select {
case val := <-ch:
// valeur reçue, continuer le travail
case <-time.After(time.Second * 5):
// délai d'attente écoulé, arrêter la goroutine
}
Une autre méthode consiste à utiliser un contexte (context.Context), qui peut être annulé de l'extérieur :
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// traiter val
case <-ctx.Done():
// arrêter la goroutine
}
}()
// quelque part dans le code, appeler cancel() pour arrêter la goroutine
Ainsi, la goroutine ne restera pas bloquée indéfiniment et pourra se terminer proprement.