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