Menghapus paket yang diinstal dengan go get


227

Saya berlari go get packageuntuk mengunduh sebuah paket sebelum mengetahui bahwa saya perlu mengatur GOPATHpaket saya jika tidak, paket ini akan menodai root saya menginstal Go (saya akan lebih suka menjaga instalasi Go saya bersih dan memisahkan inti dari custom). Bagaimana cara menghapus paket yang diinstal sebelumnya?


2
Bagi mereka yang menggunakan modul Go, stackoverflow.com/questions/57186705/…
jesugmz

Jawaban:


187

Aman untuk menghapus direktori sumber dan mengkompilasi file paket. Cari direktori source di bawah $GOPATH/srcdan paket file di bawah $GOPATH/pkg/<architecture>, misalnya: $GOPATH/pkg/windows_amd64.


5
Awalnya saya mencari $ GOPATH / pkg / architecture / yang tidak ada. Kemudian saya menyadari bahwa yang Anda maksud adalah $ GOPATH / pkg / {{architecture}}, contoh $ GOPATH / pkg / windows_amd64.
Nucleon

1
Nilai default GOPATHadalah /usr/lib/go.
Flimm

246
Jika itu aman dan sederhana, mengapa tidak ada sub-perintah yang melakukannya?
Bengt

71
datang dari npm, kami memiliki lebih jauh kego
slf

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

152

Anda dapat menghapus file arsip dan binari yang dapat dieksekusi yang go install(atau go get) hasilkan untuk paket go clean -i importpath.... Ini biasanya berada di bawah $GOPATH/pkgdan $GOPATH/bin, masing-masing.

Pastikan untuk memasukkan ...di importpath, karena tampaknya bahwa, jika sebuah paket menyertakan executable, go clean -ihanya akan menghapusnya dan tidak mengarsipkan file untuk subpackages, seperti gore/gocodedalam contoh di bawah ini.

Kode sumber kemudian perlu dihapus secara manual dari $GOPATH/src.

go cleanmemiliki -nbendera untuk menjalankan kering yang mencetak apa yang akan dijalankan tanpa menjalankannya, sehingga Anda dapat yakin (lihat go help clean). Ini juga memiliki -rflag yang menggoda untuk secara dependensi membersihkan dependensi, yang Anda mungkin tidak ingin menggunakannya karena Anda akan melihat dari proses kering bahwa itu akan menghapus banyak file arsip perpustakaan standar!

Contoh lengkap, yang bisa dijadikan dasar skrip jika Anda suka:

$ 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

Perhatikan bahwa informasi ini didasarkan pada goalat di Go versi 1.5.1.


2
Bagaimana Anda menemukan semua dependensi proyek?
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
}

Pemakaian:

# 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.