Junior — Middle
Est-il possible d'effectuer une opération de lecture du canal sans utiliser de tampon?
sobes.tech IA
Réponse de l'IA
En Go, l'opération de lecture d'un canal (chan) sans utiliser de tampon n'est possible que si le canal est tamponné. Si le canal n'est pas tamponné (taille 0), l'opération de lecture se bloque jusqu'à ce qu'une valeur soit envoyée dans le canal.
Ainsi :
- Pour une lecture non bloquante sans tampon, il faut utiliser des opérations non bloquantes avec le canal (par exemple, via
selectavecdefault), mais cela ne garantit pas la réception des données. - Si le canal n'est pas tamponné, la lecture se bloque toujours jusqu'à ce que quelqu'un envoie des données.
Exemple de canal tamponné :
ch := make(chan int, 1) // tampon de 1 élément
ch <- 42 // envoi de la valeur
val := <-ch // lecture sans blocage
Si le canal n'est pas tamponné, la lecture et l'écriture se synchronisent directement entre goroutines.