Junior — Middle
Comment arrêter correctement une goroutine en cours d'exécution, si nécessaire, pour que la fin se produise en fonction d'un signal externe ou d'une condition, même si le résultat n'a pas encore été obtenu?
sobes.tech IA
Réponse de l'IA
Pour arrêter correctement une goroutine en cours d'exécution par un signal externe ou une condition en Go, on utilise généralement le contexte (context.Context) ou des canaux pour transmettre le signal d'annulation.
Exemple avec utilisation du contexte :
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Signal d'annulation reçu, terminer la goroutine
return
default:
// Effectuer le travail
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// À un moment donné, appeler cancel() pour arrêter la goroutine
cancel()
}
Cette approche permet à la goroutine de vérifier régulièrement si un signal d'arrêt a été envoyé, et de se terminer proprement, même si le résultat n'est pas encore obtenu. On peut également utiliser un canal pour transmettre le signal d'arrêt, mais context est une méthode plus idiomatique et pratique en Go.