Rimozione dei pacchetti installati con go get


227

Ho corso go get packageper scaricare un pacchetto prima di sapere che dovevo impostare il mio GOPATHaltrimenti il ​​pacchetto imbraccia la mia installazione di root di Go (preferirei di gran lunga mantenere la mia installazione di Go pulita e separare il core da quello personalizzato). Come rimuovo i pacchetti installati in precedenza?


2
Per coloro che utilizzano i moduli Go stackoverflow.com/questions/57186705/...
jesugmz

Risposte:


187

È sicuro eliminare semplicemente la directory di origine e il file del pacchetto compilato. Trova la directory di origine sotto $GOPATH/srce il file del pacchetto sotto $GOPATH/pkg/<architecture>, per esempio: $GOPATH/pkg/windows_amd64.


5
All'inizio ho cercato $ GOPATH / pkg / architecture / che non esisteva. Poi ho capito che quello a cui ti riferivi era $ GOPATH / pkg / {{architecture}}, esempio $ GOPATH / pkg / windows_amd64.
Nucleon,

1
Il valore predefinito di GOPATHè /usr/lib/go.
Flimm,

246
Se è sicuro e semplice, perché non esiste un sottocomando che lo faccia?
Bengt,

71
venendo da npm, abbiamo molto più avantigo
slf

4
Su Mac: $ GOPATH = $ HOME / go
Ricardo Martins,

152

È possibile eliminare i file di archivio e i file binari eseguibili che go install(o go get) produce per un pacchetto con go clean -i importpath.... Questi normalmente risiedono sotto $GOPATH/pkge $GOPATH/bin, rispettivamente.

Assicurati di includere ...nel percorso di importazione, poiché sembra che, se un pacchetto include un file eseguibile, go clean -ilo rimuoverà e non archiverà i file per i pacchetti secondari, come gore/gocodenell'esempio seguente.

Il codice sorgente deve quindi essere rimosso manualmente da $GOPATH/src.

go cleanha un -nflag per una corsa a secco che stampa ciò che verrà eseguito senza eseguirlo, quindi puoi esserne certo (vedi go help clean). Ha anche un allettante -rflag per pulire in modo ricorsivo le dipendenze, che probabilmente non vorrai effettivamente usare poiché vedrai da una corsa a secco che eliminerà molti file di archivio della libreria standard!

Un esempio completo, su cui puoi basare uno script se ti piace:

$ 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

Si noti che queste informazioni si basano sullo gostrumento in Go versione 1.5.1.


2
Come trovate tutte le dipendenze dei progetti?
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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.