A linguagem Go permite controlar manualmente as dependências com mais facilidade.
Cada item da sua aplicação pode ser instanciado onde o desenvolvedor desejar. Go nos dá essa liberdade.
Mas, com o crescimento do projeto, é importante arranjar uma estratégia para carregar as dependências, porque elas podem afetar positiva ou negativamente a aplicação.
Essa liberdade do Go pode dar margem para vários erros de dependências. Para projetos pequenos, faz sentido, mas para grandes projectos pode ser difícil de manter.
Cenário comum: main inflado
- Instanciar DB, cache, configs no main
- Instanciar repos, services
- Criação e inicialização dos componentes Isso Faz sentido para projetos com poucos componentes, não reprsenta grandes riscos.
Solução: injeção via containers
- Criar container de infraestrutura: DB, Cache, Logger, Mensageria e outros.
- Container de serviços: regras de negócio
- Container de repositórios: interação com a base de dados No Main, só precisamos carregar os containers. o Main se torna o maestro da aplicação.
Vantagens
- Criação dos objetos 1 vez apenas
- Organização dos componentes
- Separação de responsabilidades
- Performance melhorada
Por que fazer isso manualmente?
Embora existam bibliotecas como Google Wire ou Uber FX, fazer a gestão manual com containers traz:
- Performance: Sem uso de reflection em tempo de execução.
- Transparência: Você vê exatamente o que está sendo injetado e onde.
- Singleton por Design: Objetos pesados (como pools de DB) são criados apenas uma vez.
- Testabilidade: É fácil substituir um repositório real por um mock nos seus testes.
Código-fonte
- https://github.com/ortizdavid/golang-pocs
- https://github.com/ortizdavid/golang-pocs/tree/main/dependency-injection
Como tens organizado as dependências nos teus projetos? Abordagem manual ou usas bibliotecas?





Top comments (0)