Sobes.tech
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.