Видалення пакунків, встановлених за допомогою go get


227

Я побіг go get packageзавантажити пакунок, перш ніж дізнатися, що мені потрібно встановити свій GOPATHінакше, щоб пакет мав кореневий механізм Go install (я б вважав за краще зберегти Go Go чистим та відокремленим ядром від звичайного). Як видалити встановлені раніше пакети?


2
Для тих , хто використовує Go модулі stackoverflow.com/questions/57186705 / ...
jesugmz

Відповіді:


187

Безпечно просто видалити вихідний каталог та скомпільований файл пакету. Знайдіть вихідний каталог під $GOPATH/srcі файл пакета під $GOPATH/pkg/<architecture>, наприклад: $GOPATH/pkg/windows_amd64.


5
Спочатку я шукав $ GOPATH / pkg / architecture /, який не існував. Тоді я зрозумів, що ви маєте на увазі $ GOPATH / pkg / {{architecture}}, наприклад $ GOPATH / pkg / windows_amd64.
Нуклеон

1
Значення за замовчуванням GOPATH- /usr/lib/go.
Flimm

245
Якщо це безпечно і просто, чому не існує підкоманди go, яка це робить?
Бенгт

71
що йде з npm, у нас так далекоgo
slf

4
На Mac: $ GOPATH = $ HOME / go
Рікардо Мартінс

152

Ви можете видалити архівні файли та виконувані бінарні файли, які go install(або go get) виробляє для пакету go clean -i importpath.... Вони зазвичай проживають відповідно $GOPATH/pkgі $GOPATH/binвідповідно.

Не забудьте включити їх ...на importpath, оскільки, схоже, якщо пакет містить виконуваний файл, go clean -iвін видалить лише це, а не архівує файли для підпакетів, як gore/gocodeу прикладі нижче.

Потім вихідний код потрібно видалити вручну $GOPATH/src.

go cleanмає -nпрапор для сухого пробігу, який друкує те, що буде запущено, не виконуючи його, так що ви можете бути впевнені (див. go help clean). Він також має заманливий -rпрапор для рекурсивно чистих залежностей, які ви, мабуть, не хочете фактично використовувати, оскільки ви побачите із сухого запуску, що він видалить багато стандартних файлів архіву бібліотеки!

Повний приклад, на якому ви можете базувати сценарій, якщо вам подобається:

$ 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

Зауважте, що ця інформація заснована на goінструменті Go Go версії 1.5.1.


2
Як ви знаєте всі залежності проектів?
Майкл Маллетт

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
}

Використання:

# 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.