Sobes.tech
Junior — Middle

Comment doit-on effectuer correctement la lecture des données à partir d'un canal sans tampon?

sobes.tech IA

Réponse de l'IA

En Go, pour lire des données d'un canal sans tampon, il faut utiliser une lecture non bloquante ou une lecture avec contrôle de la disponibilité des données. Les canaux par défaut peuvent être tamponnés ou non tamponnés, mais pour lire sans tampon, on utilise généralement des canaux non tamponnés et la lecture avec l'opérateur <-.

Exemple de lecture depuis un canal non tamponné :

ch := make(chan int) // canal non tamponné

// Envoi dans une goroutine séparée
go func() {
    ch <- 42
}()

// Lecture (attendra que les données soient disponibles)
value := <-ch
fmt.Println(value) // 42

Pour éviter le blocage lors de la lecture, on peut utiliser la construction avec select et default :

select {
case val := <-ch:
    fmt.Println("Reçu", val)
default:
    fmt.Println("Pas de données")
}