Sobes.tech
Junior — Middle

Comment le contrôle et la coordination du travail des goroutines sont-ils effectués en Go?

sobes.tech IA

Réponse de l'IA

En Go, le contrôle et la coordination des goroutines se font de plusieurs manières :

  • Canaux (channels) — mécanisme principal pour échanger des données et synchroniser entre goroutines. Les canaux permettent de transmettre des valeurs en toute sécurité et bloquent l’expéditeur ou le récepteur jusqu’à ce qu’ils soient prêts.

  • sync.WaitGroup — utilisé pour attendre la fin d’un groupe de goroutines. Permet à la goroutine principale d’attendre que toutes les goroutines lancées se terminent.

  • Contexte (context.Context) — utilisé pour gérer la durée de vie des goroutines, transmettre des signaux d’annulation et des délais.

  • Mutex et autres primitives du paquet sync — pour protéger les ressources partagées et éviter les conditions de course.

Exemple avec WaitGroup et canal :

var wg sync.WaitGroup
ch := make(chan int)

wg.Add(1)
go func() {
    defer wg.Done()
    ch <- 42 // envoi de la valeur
}()

go func() {
    val := <-ch // réception de la valeur
    fmt.Println(val)
}()

wg.Wait() // attendre la fin

Ainsi, la combinaison de canaux et de primitives de synchronisation permet de gérer efficacement l’exécution parallèle des goroutines.