Tool Dependencies
Gerenciamento de dependências de ferramentas com a diretiva tool (Go 1.24+)
Introdução
Go 1.24 (fevereiro de 2025) introduziu a diretiva tool no go.mod, que finalmente resolve um problema antigo: como gerenciar ferramentas de desenvolvimento (linters, geradores de código, etc.) de forma padronizada.
Antes do Go 1.24, desenvolvedores usavam hacks como tools.go com imports vazios. Agora há uma solução oficial e elegante!
O problema antes do Go 1.24
O Hack tools.go
Desenvolvedores criavam um arquivo especial para rastrear ferramentas:
//go:build tools
// +build tools
package tools
import (
_ "github.com/golangci/golangci-lint/cmd/golangci-lint"
_ "golang.org/x/tools/cmd/goimports"
_ "github.com/swaggo/swag/cmd/swag"
)Problemas com esta abordagem:
❌ Confuso para novos desenvolvedores
❌ Build tags obscuros
❌ Ferramentas misturadas com dependências de runtime
❌ Não havia padrão oficial
A solução: diretiva tool
toolSintaxe
Como adicionar uma tool
toolComo executar uma `tool```
Exemplo
go.mod com tool
toolSetup de novo desenvolvedor
Comandos úteis
Gerenciamento de ferramentas
Executar tool
toolVantagens da diretiva tool
Clareza
Obscuro
Explícito e oficial
Separação
Misturado com deps
Separado claramente
Execução
go run manual
go tool integrado
Cache
Não
Sim (builds mais rápidos)
Padrão
Hack não oficial
Suporte oficial
IDEs
Suporte limitado
Suporte nativo
Casos de uso comuns
1. Linters e Formatadores
2. Geradores de código
3. Ferramentas de teste e cobertura
Cache de ferramentas
Go 1.24+ cacheia execuções de ferramentas no build cache:
Integração com CI/CD
GitHub Actions
Makefile
Problema: Conflitos de dependências
O Desafio
Ferramentas podem ter dependências conflitantes com seu projeto:
Solução 1: Aceitar o conflito (simples)
Solução 2: go.mod separado (avançado)
Migrando de tools.go
Antes (tools.go)
Depois (go.mod)
Passos de migração
Melhores práticas
✅ Faça
Use
tooldirective para todas as ferramentas de desenvolvimentoDocumente ferramentas necessárias no README
Versione ferramentas (não use
@latestem produção)Inclua
go install toolno setup de novos desenvolvedoresUse cache de ferramentas no CI para velocidade
❌ Evite
Misturar ferramentas com dependências de runtime manualmente
Manter
tools.goem projetos Go 1.24+Usar
go runpara ferramentas (usego tool)Ignorar conflitos de dependências sem investigar
Troubleshooting
Erro: "unknown command"
Erro: Versão conflitante
Cache não funciona
Recursos adicionais
Conclusão
A diretiva tool do Go 1.24 é uma adição extremamente bem-vinda:
🎯 Padroniza gerenciamento de ferramentas
🚀 Simplifica setup de novos desenvolvedores
⚡ Melhora performance com caching
📦 Organiza dependências claramente
{% hint style="success" %} Migre seus projetos! Substitua `
tools.gopela diretivatool` para aproveitar todos os benefícios do Go 1.24+.
Last updated