Sobes.tech
Junior — Middle

Pouvez-vous donner un exemple de quand et comment les canaux sont utilisés pour échanger des données entre des threads ou des goroutines?

sobes.tech IA

Réponse de l'IA

En Go, les canaux sont utilisés pour échanger des données en toute sécurité entre goroutines, permettant de les synchroniser et de transmettre des valeurs.

Exemple d'utilisation d'un canal pour transmettre des nombres d'une goroutine à une autre :

package main

import (
    "fmt"
    "time"
)

func producteur(ch chan int) {
    for i := 0; i < 5; i++ {
        ch <- i // envoyer des données dans le canal
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // fermer le canal après avoir envoyé toutes les données
}

func consommateur(ch chan int) {
    for val := range ch { // recevoir des données du canal
        fmt.Println("Reçu:", val)
    }
}

func main() {
    ch := make(chan int)
    go producteur(ch)
    consommateur(ch)
}

Ici, producteur envoie des nombres dans le canal, et consommateur les lit. Les canaux assurent un transfert sécurisé des données sans avoir besoin d'utiliser des mutex ou d'autres mécanismes de synchronisation.