Sobes.tech
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)