O go tool do Go 1.24 é umas atualizações mais legais do ecossistema

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.
novo go tools 1.24

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?

  1. Instalar ferramentas com go get -tool:
    go get -tool golang.org/x/tools/cmd/goimports
  2. Executar ferramentas com go tool:
    go tool goimports --help
  3. Listar todas as ferramentas instaladas:
    go tool
  4. 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

BenchmarkAntigo (go run)Novo (go tool)
Primeira execução50.29s55.05s
Execuções subsequentes1.04s0.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

  1. Go 1.24 está previsto para fevereiro de 2025. Atualize sua versão e experimente o go tool.
  2. Migre suas ferramentas (mockgen, oapi-codegen, goimports).
  3. Compartilhe suas experiências!

That’s all folks! Até a próxima.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Post Anterior

Arquitetura Limpa em Go – Parte 11 – Estudo de Casos

Posts Relacionados