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