Junior — Middle
Como é que a transmissão de dados é realizada através de um canal não bufferizado?
sobes.tech IA
Resposta da IA
No Go, um canal não bufferizado (canal sem buffer) garante a transferência síncrona de dados entre goroutines. Isso significa que o envio de um valor para o canal bloqueia até que outra goroutine receba esse valor do canal, e vice-versa: a recepção bloqueia até que haja um valor para ler.
Assim, a transferência de dados através de um canal não bufferizado ocorre com a sincronização do remetente e do destinatário, garantindo uma troca de dados sem armazenamento intermediário.
Exemplo:
ch := make(chan int) // canal não bufferizado
go func() {
ch <- 42 // o envio bloqueia até que alguém leia
}()
value := <-ch // a recepção bloqueia a execução até que um valor apareça
fmt.Println(value) // exibirá 42
Neste exemplo, a goroutine envia um número para o canal e bloqueia até que a goroutine principal leia esse número.