Sobes.tech
Junior — Middle

Est-il possible qu'une goroutine soit interrompue ou s'arrête d'elle-même?

sobes.tech IA

Réponse de l'IA

En Go, l'exécution d'une goroutine peut se terminer d'elle-même dans plusieurs cas :

  • La goroutine a terminé sa fonction. Dès que la fonction lancée dans la goroutine s'exécute jusqu'à la fin, la goroutine se termine.
  • Panic à l'intérieur de la goroutine. Si un panic se produit dans la goroutine et n'est pas géré, la goroutine se terminera de manière abrupte.
  • Annulation via le contexte (context). Si la goroutine écoute un signal d'annulation via context.Context et le reçoit, elle peut se terminer proprement.

Il est important de comprendre que les goroutines ne sont pas interrompues de force de l'extérieur — il faut implémenter un mécanisme d'arrêt soi-même, par exemple via des canaux ou des contextes.

Exemple d'utilisation du contexte pour annuler une goroutine :

ctx, cancel := context.WithCancel(context.Background())

go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine terminée")
            return
        default:
            // travail
        }
    }
}(ctx)

// À un moment donné, on appelle cancel()
cancel()

Ainsi, la goroutine se termine soit d'elle-même à la fin de son travail, soit par signal d'annulation si cela est prévu.