Removendo pacotes instalados com go get


227

Corri go get packagepara fazer o download de um pacote antes de aprender que eu precisava definir o GOPATHque de outra forma esse pacote mancha minha instalação Go Go (eu preferiria manter minha instalação Go limpa e separar o núcleo do personalizado). Como removo os pacotes instalados anteriormente?


2
Para aqueles que usam os módulos Go, stackoverflow.com/questions/57186705/…
jesugmz

Respostas:


187

É seguro excluir o diretório de origem e o arquivo do pacote compilado. Encontre o diretório de origem sob $GOPATH/srce o arquivo do pacote sob $GOPATH/pkg/<architecture>, por exemplo: $GOPATH/pkg/windows_amd64.


5
No começo, procurei por $ GOPATH / pkg / architecture / que não existia. Então percebi que você estava se referindo a $ GOPATH / pkg / {{architecture}}, exemplo $ GOPATH / pkg / windows_amd64.
Nucleon

1
O valor padrão de GOPATHé /usr/lib/go.
Flimm

246
Se é seguro e simples, por que não existe um subcomando go?
Bengt

71
vindo da npm, temos muito mais parago
slf

4
No Mac: $ GOPATH = $ HOME / go
Ricardo Martins

152

Você pode excluir os arquivos archive e binários executáveis ​​que go install(ou go get) produzem para um pacote go clean -i importpath.... Estes normalmente residem em $GOPATH/pkge $GOPATH/bin, respectivamente.

Certifique-se de incluir ...no caminho de importação, pois parece que, se um pacote incluir um executável, go clean -iapenas o removerá e não arquivará os arquivos para subpacotes, como gore/gocodeno exemplo abaixo.

O código-fonte precisa ser removido manualmente de $GOPATH/src.

go cleanpossui um -nsinalizador para uma execução a seco que imprime o que será executado sem executá-lo, para que você possa ter certeza (consulte go help clean). Ele também possui um -rsinalizador tentador para limpar recursivamente as dependências, que você provavelmente não deseja usar, uma vez que você verá a partir de uma execução a seco que excluirá muitos arquivos padrão da biblioteca!

Um exemplo completo, no qual você pode basear um script, se desejar:

$ go get -u github.com/motemen/gore

$ which gore
/Users/ches/src/go/bin/gore

$ go clean -i -n github.com/motemen/gore...
cd /Users/ches/src/go/src/github.com/motemen/gore
rm -f gore gore.exe gore.test gore.test.exe commands commands.exe commands_test commands_test.exe complete complete.exe complete_test complete_test.exe debug debug.exe helpers_test helpers_test.exe liner liner.exe log log.exe main main.exe node node.exe node_test node_test.exe quickfix quickfix.exe session_test session_test.exe terminal_unix terminal_unix.exe terminal_windows terminal_windows.exe utils utils.exe
rm -f /Users/ches/src/go/bin/gore
cd /Users/ches/src/go/src/github.com/motemen/gore/gocode
rm -f gocode.test gocode.test.exe
rm -f /Users/ches/src/go/pkg/darwin_amd64/github.com/motemen/gore/gocode.a

$ go clean -i github.com/motemen/gore...

$ which gore

$ tree $GOPATH/pkg/darwin_amd64/github.com/motemen/gore
/Users/ches/src/go/pkg/darwin_amd64/github.com/motemen/gore

0 directories, 0 files

# If that empty directory really bugs you...
$ rmdir $GOPATH/pkg/darwin_amd64/github.com/motemen/gore

$ rm -rf $GOPATH/src/github.com/motemen/gore

Observe que essas informações são baseadas na goferramenta Go versão 1.5.1.


2
Como você encontra todas as dependências do projeto?
22318 Michael Mallett

5
#!/bin/bash

goclean() {
 local pkg=$1; shift || return 1
 local ost
 local cnt
 local scr

 # Clean removes object files from package source directories (ignore error)
 go clean -i $pkg &>/dev/null

 # Set local variables
 [[ "$(uname -m)" == "x86_64" ]] \
 && ost="$(uname)";ost="${ost,,}_amd64" \
 && cnt="${pkg//[^\/]}"

 # Delete the source directory and compiled package directory(ies)
 if (("${#cnt}" == "2")); then
  rm -rf "${GOPATH%%:*}/src/${pkg%/*}"
  rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*}"
 elif (("${#cnt}" > "2")); then
  rm -rf "${GOPATH%%:*}/src/${pkg%/*/*}"
  rm -rf "${GOPATH%%:*}/pkg/${ost}/${pkg%/*/*}"
 fi

 # Reload the current shell
 source ~/.bashrc
}

Uso:

# Either launch a new terminal and copy `goclean` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

goclean github.com/your-username/your-repository
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.