Удаление пакетов, установленных с помощью go get
Я побежал go get package чтобы загрузить пакет, прежде чем узнать, что мне нужно установить мой GOPATH в противном случае этот пакет загрязняет мою корневую установку Go (я бы предпочел, чтобы мой Go install был чистым и отделял ядро от пользовательского). Как удалить пакеты, установленные ранее?
3 ответов:
безопасно просто удалить исходный каталог и скомпилированный файл пакета. Найдите исходный каталог в разделе
$GOPATH/srcи файл пакета под$GOPATH/pkg/<architecture>, например:$GOPATH/pkg/windows_amd64.
вы можете удалить архивные файлы и исполняемые двоичные файлы, которые
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.
#!/bin/bash goclean() { local pkg=; 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
Comments