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.Contextet 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.