Junior — Middle
Que se passe-t-il si vous essayez de lire des données d'un canal qui ne contient actuellement aucun élément?
sobes.tech IA
Réponse de l'IA
En Go, si vous essayez de lire d'un canal qui ne contient actuellement aucun élément, le comportement dépend du type de canal:
- Canal tamponné : si le tampon est vide, la lecture se bloque jusqu'à ce qu'un élément soit écrit dans le canal.
- Canal non tamponné : la lecture se bloque jusqu'à ce qu'une autre goroutine envoie une valeur.
Ainsi, lire d'un canal vide entraîne le blocage de la goroutine en cours jusqu'à l'apparition de données ou la fermeture du canal.
Exemple :
ch := make(chan int)
// La lecture d'un canal vide bloquera l'exécution
val := <-ch // se bloque jusqu'à ce que quelqu'un envoie une valeur
// Pour éviter le blocage, on peut utiliser select avec default
select {
case val := <-ch:
fmt.Println("Reçu", val)
default:
fmt.Println("Pas de données dans le canal")
}