Junior — Middle
Como é que o programa se comporta ao tentar gravar dados num canal sem buffer, se este estiver inicialmente vazio?
sobes.tech IA
Resposta da IA
No Go, um canal sem buffer (tamanho do buffer = 0) é síncrono. Isso significa que, ao tentar escrever dados nesse canal, se não houver um receptor pronto naquele momento, o programa fica bloqueado e espera até que outra goroutine leia o valor do canal.
Ou seja, a escrita em um canal sem buffer não acontece instantaneamente, mas requer uma recepção simultânea. Isso garante a sincronização entre o remetente e o receptor.
Exemplo:
ch := make(chan int) // canal sem buffer
// Enviando em uma goroutine separada
go func() {
ch <- 42 // fica bloqueado até alguém ler
}()
// Leitura
val := <-ch // após a leitura, o envio é desbloqueado
fmt.Println(val)