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

  1. 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)
  1. 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.