Introdução
O Go 1.24 traz uma das atualizações mais impactantes para o ecossistema Go nos últimos anos: o novo sistema go tool. Essa mudança simplifica a maneira como os projetos Go gerenciam ferramentas como mockgen, oapi-codegen e golangci-lint, tornando a gestão de dependências de ferramentas mais organizada, rastreável e versionada.
Antes do Go 1.24, gerenciar ferramentas era um processo manual e desorganizado. Os desenvolvedores precisavam usar go install, criar arquivos tools.go ou manter scripts externos para acompanhar ferramentas específicas do projeto. Isso frequentemente levava a um bloat na árvore de dependências, conflitos de versão e inconsistências entre ambientes de desenvolvimento.
Agora, com go tool, é possível instalar, rastrear e executar ferramentas dentro do sistema de módulos do Go, garantindo dependências específicas para cada projeto sem afetar a instalação global.
Antes do Go 1.24: O Problema do Gerenciamento de Ferramentas
1. Instalar ferramentas globalmente com go install
go install golang.org/x/tools/cmd/goimports@latest- As ferramentas não eram rastreadas no
go.mod, causando inconsistências entre ambientes. - Cada desenvolvedor precisava instalar as ferramentas manualmente, sem garantia de que estava usando a versão correta.
2. Usar um arquivo tools.go
//go:build tools
// +build tools
package tools
import _ "golang.org/x/tools/cmd/goimports"- Isso garantia que as ferramentas fossem adicionadas ao
go.mod, mas: - Executar ferramentas via
go runera lento, pois o Go recompilava a ferramenta sempre que era executada. - Poluía a árvore de dependências, adicionando ferramentas como dependências indiretas.
3. Criar um Makefile ou scripts personalizados
TOOLS = golang.org/x/tools/cmd/goimports
.PHONY: tools
tools:
go install $(TOOLS)- Exigia instalação e controle manuais.
O go tool do Go 1.24: A Solução
O Go 1.24 introduz suporte nativo para dependências de ferramentas.
Como Funciona?
- Instalar ferramentas com
go get -tool:go get -tool golang.org/x/tools/cmd/goimports - Executar ferramentas com
go tool:go tool goimports --help - Listar todas as ferramentas instaladas:
go tool - Descobrir o local da ferramenta no sistema:
go tool -n goimports
Como o go.mod Gerencia Ferramentas
go 1.24
tool golang.org/x/tools/cmd/goimports
require (
golang.org/x/mod v0.22.0 // indirect
golang.org/x/tools v0.29.0 // indirect
)Migrando para go tool
Exemplo 1: Migrando mockgen
Antes do Go 1.24:
go install go.uber.org/mock/mockgen@latest
mockgen -source=your_interface.go -destination=mocks/your_interface_mock.goDepois do Go 1.24:
go get -tool go.uber.org/mock/mockgen
go tool mockgen -source=your_interface.go -destination=mocks/your_interface_mock.goExemplo 2: Migrando oapi-codegen
Antes do Go 1.24:
//go:generate go run github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen --config=config.yaml openapi.yamlDepois do Go 1.24:
//go:generate go tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen --config=config.yaml openapi.yamlObs: mockgen também pode ser usado com generate
Comparação de Performance
| Benchmark | Antigo (go run) | Novo (go tool) |
|---|---|---|
| Primeira execução | 50.29s | 55.05s |
| Execuções subsequentes | 1.04s | 0.59s |
Conclusão: Vale a Pena Usar go tool?
Sim, se você:
- Precisa de versões específicas de ferramentas para cada projeto.
- Quer um ambiente de desenvolvimento 100% rastreável e versionado.
- Deseja execução mais rápida de ferramentas.
Prefira go install se:
- Usa ferramentas globalmente em vários projetos.
- Precisa de ferramentas não escritas em Go.
Próximos Passos
- Go 1.24 está previsto para fevereiro de 2025. Atualize sua versão e experimente o
go tool. - Migre suas ferramentas (
mockgen,oapi-codegen,goimports). - Compartilhe suas experiências!
That’s all folks! Até a próxima.







