Junior — Middle
Como é que a troca de dados entre componentes ou sistemas é realizada sem bloqueá-los ou esperar uma resposta?
sobes.tech IA
Resposta da IA
A troca de dados sem bloqueio e sem esperar por uma resposta em Go é geralmente implementada usando canais (channels) e goroutines. Os canais permitem transmitir dados entre goroutines de forma assíncrona, e a troca sem bloqueio é alcançada usando operações não bloqueantes com canais, por exemplo, através de select com um ramo default.
Exemplo de envio e recepção de dados sem bloqueio através de um canal:
ch := make(chan int)
// Envio sem bloqueio
select {
case ch <- 42:
fmt.Println("Enviado")
default:
fmt.Println("Canal ocupado, envio ignorado")
}
// Recepção sem bloqueio
select {
case val := <-ch:
fmt.Println("Recebido", val)
default:
fmt.Println("Sem dados para receber")
}
Dessa forma, os componentes podem trocar dados sem esperar, o que aumenta o desempenho e a capacidade de resposta do sistema.