Junior — Middle
Pouvez-vous donner un exemple de scénario où un canal tamponné est utilisé pour la transmission de données?
sobes.tech IA
Réponse de l'IA
Un canal tamponné en Go est utilisé lorsque vous souhaitez transmettre des données entre goroutines, mais sans bloquer immédiatement l'expéditeur si le récepteur n'est pas encore prêt à accepter les données. Par exemple, dans un scénario où un producteur génère des données plus rapidement que le consommateur ne les traite, un canal tamponné permet d'accumuler plusieurs éléments sans faire attendre le producteur.
Exemple:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int, 3) // tampon de 3 éléments
// Producteur
go func() {
for i := 1; i <= 5; i++ {
fmt.Printf("Envoi: %d\n", i)
ch <- i // ne bloque pas tant que le tampon n'est pas plein
}
close(ch)
}()
// Consommateur
time.Sleep(time.Second) // simulons un retard
for val := range ch {
fmt.Printf("Reçu: %d\n", val)
time.Sleep(500 * time.Millisecond) // traitement lent
}
}
Dans cet exemple, le producteur peut envoyer les trois premières valeurs dans le canal tamponné sans blocage, puis attendre que le consommateur libère de l'espace.