Sobes.tech
Junior — Middle

Comment le programme se comporte-t-il lors de l'utilisation de range pour lire à partir d'un canal non tamponné fermé?

sobes.tech IA

Réponse de l'IA

Lors de l'utilisation de range pour lire à partir d'un canal en Go, la boucle recevra des valeurs du canal jusqu'à ce que celui-ci soit fermé. Si le canal est fermé et que toutes les valeurs ont été lues, range terminera la boucle.

Pour un canal non tamponné, cela fonctionne de la même manière que pour un canal tamponné : si le canal est fermé, range ne bloque pas et sort de la boucle.

Exemple :

ch := make(chan int)
func() {
    ch <- 1
    ch <- 2
    close(ch)
}()

for v := range ch {
    fmt.Println(v) // Affichera 1 et 2, puis la boucle se terminera
}

Si le canal est fermé mais qu'il n'y a pas de données, range se terminera immédiatement. Si le canal n'est pas fermé mais qu'il n'y a pas de données, range attendra (se bloquera) jusqu'à l'arrivée de données ou à la fermeture du canal.