Gerenciando ferramentas com go tool

A versão 1.24 do Go trouxe diversas melhorias significativas, incluindo suporte completo a aliases de tipos genéricos, aprimoramentos no desempenho do runtime e novas funcionalidades no sistema de módulos.

Entre essas novidades, destaca-se a introdução do comando go tool, que simplifica o gerenciamento de dependências de ferramentas auxiliares, como linters e geradores de código, diretamente no arquivo go.mod.

Nesse post, vamos ver como utilizar esse novo comando e como essa mudança elimina a necessidade de soluções alternativas anteriormente utilizadas para rastrear ferramentas como linters e geradores de código.

Como Era Antes

Antes do Go 1.24, gerenciar ferramentas auxiliares em projetos Go exigia abordagens não oficiais.

Uma das práticas mais comuns era criar um arquivo tools.go com importações em branco para as ferramentas necessárias, garantindo que elas fossem incluídas no go.mod ao executar go mod tidy.

// tools.go
//go:build tools

package tools

import (
    _ "golang.org/x/tools/cmd/stringer"
    _ "honnef.co/go/tools/cmd/staticcheck"
)

Outra abordagem era instalar as ferramentas manualmente com go install, o que, diferente da abordagem anterior, podia levar a inconsistências de versões entre diferentes ambientes de desenvolvimento, CI e etc.

O Comando go tool

Com o Go 1.24, foi introduzido o comando go tool e a diretiva tool no go.mod, permitindo declarar e gerenciar ferramentas auxiliares como dependências do módulo.

Em outras palavras, agora podemos gerencias a versão de nossos linters e geradores de código sem ter que recorrer a abordagens não oficiais, ou no português raiz… sem gambiarra!

Agora, vamos ver como fazer a gestão das ferramentas utilizando o go tool.

Como gerir as ferramentas

Para adicionar uma ferramenta ao seu projeto, utilize o comando go get com a flag -tool:

go get -tool golang.org/x/tools/cmd/stringer

Isso adiciona a seguinte entrada ao seu go.mod:

tool golang.org/x/tools/cmd/stringer

Após adicionar a ferramenta, você pode executá-la usando o comando go tool:

go tool stringer -type=MyEnum

O comando go tool garante que a versão da ferramenta utilizada seja a especificada no go.mod, promovendo consistência entre diferentes ambientes.

Se você quiser listar todas as ferramentas declaradas no módulo, utilize:

go list tool

Para atualizar todas as ferramentas para suas versões mais recentes, execute:

go get tool

Por fim, se uma ferramenta não for mais útil para o seu projeto, utilize o comando abaixo para removê-la:

go get -tool golang.org/x/tools/cmd/stringer@none

Conclusão

A introdução do comando go tool e da diretiva tool no Go 1.24 representa um avanço significativo na gestão de ferramentas auxiliares em projetos Go.

Essa funcionalidade oficializa práticas anteriormente realizadas por meio de soluções alternativas, proporcionando uma maneira mais limpa e consistente de declarar, instalar e executar ferramentas. Com isso, desenvolvedores podem garantir que todos os membros da equipe utilizem as mesmas versões das ferramentas, facilitando a manutenção e a integração contínua.

Gostou do conteúdo?

  • Inscreva-se na nossa newsletter para receber mais dicas práticas sobre Go, Kubernetes e desenvolvimento de software diretamente no seu e-mail!
  • 🚀 Torne-se um assinante pago do blog e tenha acesso a conteúdos exclusivos, como tutoriais avançados, estudos de caso e muito mais!

Faça parte da comunidade!

Receba os melhores conteúdos sobre Go, Kubernetes, arquitetura de software, Cloud e esteja sempre atualizado com as tendências e práticas do mercado.

Livros Recomendados

Abaixo listei alguns dos melhores livros que já li sobre GO.

Deixe uma resposta