O que é Wire e para que serve?
\n\nWire é uma biblioteca para injeção de dependências (Dependency Injection, DI) para a linguagem Go, desenvolvida pela equipe do Google. Ao contrário de muitos outros frameworks DI que funcionam em tempo de execução (runtime), o Wire usa geração de código em tempo de compilação. Esta é a principal diferença: o Wire analisa seu código e gera o arquivo wire_gen.go, que contém toda a lógica de vinculação de dependências. Essa abordagem elimina erros relacionados à reflexão (reflect) e torna o código totalmente tipado.
Para que serve?
\n- \n
- Simplificação da configuração: Em vez de criar manualmente todas as dependências no main.go, o Wire faz isso automaticamente. \n
- Testes: Você pode facilmente substituir implementações reais por mocks (simulações) para testes unitários. \n
- Limpeza do código: O código se torna mais modular e menos acoplado (low coupling). \n
- Segurança de tipos: Erros de configuração são detectados em tempo de compilação, não em tempo de execução. \n
O Wire é ideal para projetos grandes, onde o número de dependências chega a dezenas e centenas.
\n\nInstalação
\n\nWire não é uma biblioteca no sentido tradicional (como um pacote que você importa). É uma ferramenta de linha de comando (CLI). A instalação é feita através do gerenciador de pacotes padrão do Go:
\n\ngo install github.com/google/wire/cmd/wire@latest\n\nApós executar este comando, o arquivo binário wire estará disponível em seu $GOPATH/bin (ou $GOBIN). Certifique-se de que este diretório foi adicionado à variável de ambiente PATH.
Verifique a instalação:
\n\nwire help\n\nSe você vir a ajuda sobre os comandos — está tudo pronto para funcionar.
\n\nInício rápido com exemplo de código
\n\nVamos criar uma aplicação simples que saúda o usuário. Teremos três componentes: Message, Greeter (saudador) e Event (evento).
Passo 1: Estrutura do projeto
\n\nmyapp/\n├── main.go\n├── wire.go\n└── wire_gen.go (será gerado)\n\nPasso 2: Criamos os componentes (main.go)
\n\npackage main\n\nimport "fmt"\n\n// Message — estrutura simples contendo texto.\ntype Message struct {\n Text string\n}\n\n// NewMessage — construtor para Message.\nfunc NewMessage(text string) Message {\n return Message{Text: text}\n}\n\n// Greeter — estrutura que saúda usando Message.\ntype Greeter struct {\n Message Message\n}\n\n// NewGreeter — construtor para Greeter.\nfunc NewGreeter(m Message) Greeter {\n return Greeter{Message: m}\n}\n\n// Greet — método que retorna a saudação.\nfunc (g Greeter) Greet() Message {\n return g.Message\n}\n\n// Event — estrutura representando um evento.\ntype Event struct {\n Greeter Greeter\n}\n\n// NewEvent — construtor para Event.\nfunc NewEvent(g Greeter) Event {\n return Event{Greeter: g}\n}\n\n// Start — método que inicia o evento.\nfunc (e Event) Start() {\n msg := e.Greeter.Greet()\n fmt.Println(msg.Text)\n}\n\nfunc main() {\n // Criação manual de dependências (sem Wire)\n message := NewMessage("Olá, Wire!")\n greeter := NewGreeter(message)\n event := NewEvent(greeter)\n\n event.Start()\n}\n\nPasso 3: Criamos o arquivo wire.go
\n\nEste arquivo é o "provedor" para o Wire. Ele contém funções inicializadoras (providers) e uma função que diz ao Wire o que precisa ser montado.
\n\n//go:build wireinject\n// +build wireinject\n\npackage main\n\nimport "github.com/google/wire"\n\n// InitializeEvent — função que o Wire usará para gerar código.\n// Ela declara que precisamos de um Event, e o Wire construirá o grafo de dependências.\nfunc InitializeEvent(text string) Event {\n w Também na biblioteca
Trabalhando com Excel em Kotlin: bibliotecas Apache POI e wrappers Kotlin
Geração de PDF em Java com iText
Criação de aplicações CLI em Node.js: frameworks Commander e Yargs
Trabalhando com S3 e armazenamentos em nuvem em Swift (iOS/macOS): biblioteca AWSS3
Geração de PDF em C++: visão geral das bibliotecas e exemplos de código