Sobes.tech
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 select com default), 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.