Junior — Middle
Como é que o programa se comporta ao usar range para ler de um canal não bufferizado fechado?
sobes.tech IA
Resposta da IA
Ao usar range para ler de um canal em Go, o ciclo receberá valores do canal até que ele seja fechado. Se o canal estiver fechado e todos os valores tiverem sido lidos, o range terminará o ciclo.
Para um canal sem buffer, funciona da mesma forma que para um canal com buffer: se o canal estiver fechado, o range não bloqueia e sai do ciclo.
Exemplo:
ch := make(chan int)
func() {
ch <- 1
ch <- 2
close(ch)
}()
for v := range ch {
fmt.Println(v) // Vai imprimir 1 e 2, depois o ciclo termina
}
Se o canal estiver fechado, mas sem dados, o range terminará imediatamente. Se o canal não estiver fechado, mas sem dados, o range aguardará (ficará bloqueado) até que haja dados ou o canal seja fechado.