Sobes.tech
Junior — Middle

É possível realizar uma gravação simultânea de dados no canal sem usar buffer?

sobes.tech IA

Resposta da IA

Em Go, os canais podem ser com buffer ou sem buffer. Num canal sem buffer, a escrita (envio) bloque-se até que outra goroutine leia o valor do canal.

Não é possível fazer uma escrita simultânea num canal sem buffer, porque o envio bloqueia até à receção, e apenas um remetente pode transmitir dados num dado momento.

Se for necessário fazer uma escrita simultânea sem bloqueio, usam-se canais com buffer, onde o remetente pode colocar dados no buffer sem esperar por uma receção imediata.

Exemplo de um canal sem buffer:

ch := make(chan int) // canal sem buffer

// Envio bloqueia até alguém ler
ch <- 1

Para uma escrita simultânea sem bloqueio, é necessário um buffer:

ch := make(chan int, 2) // buffer de 2 elementos
ch <- 1 // não bloqueia
ch <- 2 // não bloqueia

Resumindo: sem buffer, a escrita simultânea não é possível.