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