Junior — Middle
Comment gérer l'état et la terminaison d'une goroutine en Go?
sobes.tech IA
Réponse de l'IA
En Go, la gestion de l'état et la terminaison des goroutines se fait généralement à l'aide de canaux (channels) et de contextes (context).
- Canaux permettent de transmettre des signaux entre goroutines. Par exemple, vous pouvez créer un canal pour notifier la nécessité de terminer:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Termine la goroutine
default:
// Effectue le travail
}
}
}()
// Pour arrêter la goroutine:
close(stop)
- Package context fournit une façon pratique de gérer la durée de vie des goroutines, notamment lors du traitement de requêtes ou d'opérations longues:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Termine la goroutine
default:
// Travail
}
}
}(ctx)
// Pour arrêter:
cancel()
Ainsi, les goroutines écoutent les signaux via des canaux ou des contextes et se terminent proprement lorsqu'elles reçoivent le signal.