444 Stimmen

Entfernen von Paketen, die mit go get installiert wurden

Ich lief go get package um ein Paket herunterzuladen, bevor ich erfuhr, dass ich meine GOPATH sonst versaut dieses Paket meine Root-Go-Installation (ich würde es vorziehen, meine Go-Installation sauber zu halten und Core von Custom zu trennen). Wie kann ich zuvor installierte Pakete entfernen?

327voto

abhisekp Punkte 2892

Ein Go-Paket kann wie folgt entfernt werden.

go get package@none

Hier @none ist die Version, die als none . Dadurch wird das Paket entfernt.

281voto

Sonia Punkte 25489

Es ist sicher, einfach das Quellverzeichnis und die kompilierte Paketdatei zu löschen. Finden Sie das Quellverzeichnis unter $GOPATH/src und die Paketdatei unter $GOPATH/pkg/<architecture> zum Beispiel: $GOPATH/pkg/windows_amd64 .

231voto

ches Punkte 5908

Sie können die Archivdateien und ausführbaren Binärdateien löschen, die go install (oder go get ) ergibt für ein Paket mit go clean -i importpath... . Diese befinden sich normalerweise unter $GOPATH/pkg y $GOPATH/bin .

Achten Sie darauf, dass Sie ... auf dem Importpfad, da es scheint, dass, wenn ein Paket eine ausführbare Datei enthält, go clean -i entfernt nur diese und keine Archivdateien für Unterpakete, wie gore/gocode im untenstehenden Beispiel.

Der Quellcode muss dann manuell aus der Datenbank entfernt werden. $GOPATH/src .

go clean hat eine -n Flagge für einen Trockenlauf, die ausgibt, was ausgeführt wird, ohne dass es ausgeführt wird, damit Sie sicher sein können (siehe go help clean ). Es hat auch eine verlockende -r Flagge, um Abhängigkeiten rekursiv zu bereinigen, was Sie wahrscheinlich nicht verwenden wollen, da Sie bei einem Probelauf sehen werden, dass es viele Archivdateien der Standardbibliothek löschen wird!

Ein komplettes Beispiel, das Sie als Grundlage für ein Skript verwenden können, wenn Sie möchten:

$ 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

Beachten Sie, dass diese Informationen auf dem go Werkzeug in Go Version 1.5.1.

67voto

R0Y3R Punkte 509

Sie können verwenden go mod tidy zum Reinigen unbenutzter Verpackungen

12voto

ecwpz91 Punkte 1317
#!/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
}

Verwendung:

# 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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X