Sobes.tech
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
            }
        }
    }()
}