Junior — Middle
Explica o que são chamadas não bloqueantes no contexto do trabalho com goroutines e como elas são implementadas.
sobes.tech IA
Resposta da IA
Chamadas não bloqueantes no contexto de goroutines são operações que não obrigam a goroutine atual a esperar pela conclusão de uma operação, permitindo que ela continue a execução. Em Go, isso geralmente está relacionado com o uso de canais e a construção select com default, para tentar enviar ou receber dados do canal sem bloquear se a operação não for possível.
Exemplo de envio não bloqueante em um canal:
ch := make(chan int)
select {
case ch <- 1: // se o canal estiver pronto para aceitar um valor
fmt.Println("Enviado")
default: // se não for possível enviar — não bloqueamos
fmt.Println("Canal ocupado, não bloqueamos")
}
Dessa forma, a goroutine não fica bloqueada se a operação com o canal for impossível, mas continua trabalhando. Isso permite gerenciar a concorrência de forma eficiente sem esperar.