web-dev-qa-db-fra.com

Supprimer les paquets installés avec go get

J'ai exécuté go get package pour télécharger un package avant d'apprendre qu'il me fallait configurer ma GOPATH sinon ce package souillonne ma racine Go install (je préférerais de beaucoup que mon installation Go soit propre et séparée de la personnalisation). Comment supprimer les packages déjà installés?

189
Nucleon

Il est prudent de simplement supprimer le répertoire source et le fichier de package compilé. Recherchez le répertoire source sous $GOPATH/src et le fichier de package sous $GOPATH/pkg/<architecture>, par exemple: $GOPATH/pkg/windows_AMD64.

151
Sonia

Vous pouvez supprimer les fichiers d’archive et les fichiers binaires exécutables que go install (ou go get) produit pour un package avec go clean -i importpath.... Ceux-ci se trouvent normalement sous $GOPATH/pkg et $GOPATH/bin, respectivement.

Assurez-vous d'inclure ... sur le chemin d'importation, car il apparaît que, si un package contient un exécutable, go clean -i ne supprimera que les fichiers d'archivage des sous-packages, comme gore/gocode dans l'exemple. au dessous de.

Le code source doit ensuite être supprimé manuellement de $GOPATH/src.

go clean possède un indicateur -n pour un essai à blanc qui imprime ce qui sera exécuté sans l'exécuter, vous pouvez donc en être certain (voir go help clean). Il comporte également un indicateur tentant -r pour nettoyer récursivement les dépendances, ce que vous ne voulez probablement pas utiliser car vous constaterez après une exécution sèche que de nombreux fichiers d'archives de bibliothèque standard seront supprimés!

Un exemple complet sur lequel vous pourriez baser un script si vous aimez:

$ 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

Notez que ces informations sont basées sur l'outil go de la version 1.5 de Go.

128
ches
#!/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
}

Usage:

# 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
3
ecwpz91