Middle — Senior
Podes dar exemplos de soluções arquitetónicas que se revelaram erradas ou ineficazes, e explicar porquê?
sobes.tech IA
Resposta da IA
Soluções arquitetónicas incorretas ou ineficazes em Go muitas vezes estão relacionadas com a aplicação incorreta dos princípios da linguagem e padrões:
- Estrutura monolítica demasiado grande. Quando todo o código está concentrado num único pacote ou ficheiro, isso dificulta a manutenção e os testes.
- Falta de interfaces para abstrações. Em Go, as interfaces permitem substituir facilmente implementações, mas se não as usar, o código torna-se rígido.
- Uso de variáveis globais para o estado. Isto leva a problemas com concorrência e testes.
- Gestão incorreta das goroutines. Por exemplo, lançar goroutines sem controlo da sua finalização ou sem contexto, o que leva a fugas de recursos.
- Uso excessivo de canais onde funções simples seriam suficientes. Os canais são bons para sincronização, mas o seu uso incorreto complica o código.
Um exemplo de má solução é lançar uma goroutine sem contexto nem controlo:
func process() {
go func() {
// ciclo infinito sem possibilidade de parar
for {
// trabalho
}
}()
}
É melhor usar o contexto para cancelar:
func process(ctx context.Context) {
go func() {
for {
select {
case <-ctx.Done():
return
default:
// trabalho
}
}
}()
}