Usuwanie pakietów zainstalowanych za pomocą go get


227

Pobiegłem, go get packageaby pobrać pakiet, zanim dowiedziałem się, że muszę ustawić mój GOPATHinny pakiet, który sullies moją instalację root Go (wolałbym zachować czystość instalacji Go i oddzielić rdzeń od niestandardowego). Jak usunąć pakiety zainstalowane wcześniej?


2
Dla korzystających z modułów Go stackoverflow.com/questions/57186705/…
jesugmz

Odpowiedzi:


187

Można bezpiecznie usunąć katalog źródłowy i skompilowany plik pakietu. Znajdź katalog źródłowy mocy $GOPATH/srci plik pakietu mocy $GOPATH/pkg/<architecture>, na przykład: $GOPATH/pkg/windows_amd64.


5
Na początku szukałem $ GOPATH / pkg / architecture /, który nie istniał. Potem zdałem sobie sprawę, że to, o czym mówisz, to $ GOPATH / pkg / {{architecture}}, na przykład $ GOPATH / pkg / windows_amd64.
Nucleon,

1
Wartość domyślna GOPATHto /usr/lib/go.
Flimm,

245
Jeśli jest to bezpieczne i proste, dlaczego nie ma komendy go, która to robi?
Bengt

71
przybywając z npm, mamy o wiele więcej dogo
slf

4
Na Macu: $ GOPATH = $ HOME / go
Ricardo Martins,

152

Możesz usunąć pliki archiwów i wykonywalne pliki binarne, które tworzy go install(lub go get) pakiet dla go clean -i importpath.... Zwykle znajdują się one odpowiednio pod $GOPATH/pkgi $GOPATH/bin.

Pamiętaj o dołączeniu ...do ścieżki importu, ponieważ wydaje się, że jeśli pakiet zawiera plik wykonywalny, go clean -iusunie tylko ten plik, a nie zarchiwizuje pliki dla podpakietów, jak gore/gocodew poniższym przykładzie.

Kod źródłowy należy następnie usunąć ręcznie z $GOPATH/src.

go cleanma -nflagę dla suchego przebiegu, który wypisuje to, co zostanie uruchomione bez jego wykonania, więc możesz być pewien (patrz go help clean). Ma także kuszącą -rflagę do rekurencyjnego czyszczenia zależności, których prawdopodobnie nie chcesz używać, ponieważ podczas suchego uruchamiania zobaczysz, że usunie wiele standardowych plików archiwów bibliotecznych!

Kompletny przykład, na którym możesz oprzeć skrypt, jeśli chcesz:

$ 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

Pamiętaj, że ta informacja jest oparta na gonarzędziu w wersji Go 1.5.1.


2
Jak znaleźć wszystkie zależności projektów?
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
}

Stosowanie:

# 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.