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.

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

Sintaxe

Como adicionar uma tool

Como executar uma `tool```

Exemplo

go.mod com tool

Setup de novo desenvolvedor

Comandos úteis

Gerenciamento de ferramentas

Executar tool

Vantagens da diretiva tool

Aspecto
tools.go (antigo)
tool (Go 1.24+)

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 tool directive para todas as ferramentas de desenvolvimento

  • Documente ferramentas necessárias no README

  • Versione ferramentas (não use @latest em produção)

  • Inclua go install tool no setup de novos desenvolvedores

  • Use cache de ferramentas no CI para velocidade

❌ Evite

  • Misturar ferramentas com dependências de runtime manualmente

  • Manter tools.go em projetos Go 1.24+

  • Usar go run para ferramentas (use go 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