Instalei um pacote com go get e não consigo remover? Guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

"Instalei um pacote, mas não consigo removê-lo!" — Uma história familiar?

\n\n

Você está começando a estudar Go, encontra uma biblioteca incrível no GitHub, digita go get github.com/example/package — e tudo funciona! Mas o tempo passa, o projeto muda e você percebe: esse pacote não é mais necessário. Você procura pelos comandos go remove ou go uninstall, mas... eles simplesmente não existem.

\n\n

Bem-vindo ao mundo do Go, onde remover pacotes não é um botão, mas sim uma pequena aventura. Neste artigo, vamos entender para onde os pacotes vão após o go get, como "despejá-los" corretamente e por que o Go foi projetado dessa forma. Spoiler: depois de ler, você não terá mais medo da bagunça no sistema e aprenderá a manter seus projetos limpos e organizados.

\n\n

Como o go get funciona: uma breve introdução

\n\n

Antes de remover, vamos entender exatamente para onde o pacote vai. No Go (até a versão 1.16, mas esse conhecimento ainda é relevante), o comando go get baixava o código-fonte do pacote para duas pastas:

\n\n
    \n
  • $GOPATH/src — o código-fonte do pacote (como se você tivesse clonado o repositório);
  • \n
  • $GOPATH/pkg — os arquivos de objeto compilados (.a).
  • \n
\n\n

Se você usa Go modules (e a partir da versão 1.16 esse é o modo padrão), o go get funciona de forma diferente: ele adiciona a dependência ao go.mod e baixa o módulo para o cache ($GOPATH/pkg/mod).

\n\n

O problema é que o Go não possui um comando nativo para "remover pacotes". Os desenvolvedores da linguagem acreditam que, se um pacote não é mais necessário, basta não importá-lo no código. Isso faz sentido, mas o que fazer quando você quer liberar espaço ou organizar tudo?

\n\n

Método #1: go clean -i (para projetos antigos sem módulos)

\n\n

Antigamente (antes da era dos módulos), existia o comando go clean -i. Ele removia os arquivos compilados do pacote de $GOPATH/pkg. Mas o código-fonte não era tocado. Ou seja, você removia apenas os artefatos binários, mas o código permanecia em src.

\n\n
# Remove os arquivos compilados do pacote\ngo clean -i github.com/example/package\n\n# O código-fonte ainda está aqui:\nls $GOPATH/src/github.com/example/package
\n\n

Na prática, isso era inconveniente. Por isso, nas versões modernas do Go (a partir da 1.12), o go clean -i foi declarado obsoleto. Se você executar go clean -i hoje, o Go simplesmente ignorará a flag -i e executará o go clean padrão (removendo arquivos objeto no projeto atual).

\n\n

Método #2: Remoção manual do GOPATH (para veteranos)

\n\n

Se você ainda trabalha sem módulos (ou apenas quer limpar resquícios antigos), terá que fazer manualmente. Aqui está a receita completa:

\n\n
    \n
  1. Descubra onde está o seu $GOPATH:
  2. \n
\n\n
go env GOPATH
\n\n

Geralmente é /home/usuario/go ou C:\\Users\\usuario\\go.

\n\n
    \n
  1. Remova o código-fonte:
  2. \n
\n\n
rm -rf $GOPATH/src/github.com/example/package
\n\n
    \n
  1. Remova os arquivos compilados (se existirem):
  2. \n
\n\n
rm -rf $GOPATH/pkg/linux_amd64/github.com/example/package.a
\n\n
\n

Importante: O caminho para o arquivo .a depende do seu sistema operacional e arquitetura. linux_amd64 é um exemplo típico. Você pode descobrir o caminho exato com go list -m, mas é mais simples remover toda a pasta do pacote dentro de pkg.

\n
\n\n

Esse método funciona, mas é "sujo". Você corre o risco de remover algo importante acidentalmente. Além disso, se o pacote for usado em outros projetos, eles quebrarão.

\n\n

Método #3: A abordagem moderna — go mod tidy

\n\n

Se você usa Go modules (e deveria usá-los se começou a estudar em 2024), tudo é muito mais elegante. Quando você para de importar um pacote no seu código, ele automaticamente deixa de ser

Blogs

Book Recommendations