Удаление пакетов, установленных с помощью go get


227

Я побежал, go get packageчтобы загрузить пакет, прежде чем узнал, что мне нужно установить свой GOPATHпакет, иначе моя корневая установка 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 / {{архитектура}}, пример $ GOPATH / pkg / windows_amd64.
Нуклон

1
Значением по умолчанию GOPATHявляется /usr/lib/go.
Flimm

246
Если это безопасно и просто, почему нет подкоманды go, которая это делает?
Бенгт

71
исходя из нпм, у нас так много всего впередgo
slf

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

152

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

Обязательно ...включите в путь импорта, так как кажется, что, если пакет включает в себя исполняемый файл, 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 версии 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.