Junior — Middle
É possível realizar uma operação de leitura do canal sem usar buffer?
sobes.tech IA
Resposta da IA
Em Go, a operação de leitura de um canal (chan) sem usar buffer só é possível se o canal for com buffer. Se o canal não for com buffer (tamanho 0), a operação de leitura bloqueia até que um valor seja enviado ao canal.
Assim:
- Para leitura não bloqueante sem buffer, deve-se usar operações não bloqueantes com o canal (por exemplo, via
selectcomdefault), mas isso não garante a recepção de dados. - Se o canal não for com buffer, a leitura sempre bloqueia até que alguém envie dados.
Exemplo de canal com buffer:
ch := make(chan int, 1) // buffer de 1 elemento
ch <- 42 // enviando valor
val := <-ch // lendo sem bloqueio
Se o canal não for com buffer, leitura e escrita se sincronizam diretamente entre goroutines.