Junior — Middle
Fale sobre a tarefa mais memorável relacionada com o uso de goroutines
sobes.tech IA
Resposta da IA
Uma das tarefas memoráveis com goroutines esteve relacionada com o processamento paralelo de um grande número de pedidos a uma API externa.
Era necessário enviar centenas de pedidos simultaneamente, controlando ao mesmo tempo o número de goroutines a trabalhar para não sobrecarregar o sistema e evitar rejeições da API.
Solução:
- Usei um pool de goroutines com limite.
- Para isso, utilizei um canal com buffer como semáforo, que limitava o número de goroutines ativas.
- Cada goroutine processava um pedido e, ao terminar, libertava um espaço.
Exemplo de código:
sem := make(chan struct{}, 10) // máximo de 10 goroutines
for _, req := range requests {
sem <- struct{}{} // reservar espaço
go func(r Request) {
defer func() { <-sem }() // libertar espaço
processRequest(r)
}(req)
}
// aguardar que todas as goroutines terminem
for i := 0; i < cap(sem); i++ {
sem <- struct{}{} // preencher o canal para esperar
}
Isto permitiu usar os recursos de forma eficiente e evitar sobrecarga.