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