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 run
era 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.go
Depois do Go 1.24:
go get -tool go.uber.org/mock/mockgen
go tool mockgen -source=your_interface.go -destination=mocks/your_interface_mock.go
Exemplo 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.yaml
Depois do Go 1.24:
//go:generate go tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen --config=config.yaml openapi.yaml
Obs: 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.