删除随go get安装的软件包

Nuc*_*eon 204 go

我跑去go get package下载一个软件包,然后才知道我需要设置我的GOPATH软件包否则我的root Go安装(我更喜欢保持我的Go安装干净并将内核与自定义分开).如何删除先前安装的软件包?

Son*_*nia 167

只删除源目录和编译的包文件是安全的.找到下面的源目录$GOPATH/src和下面的包文件$GOPATH/pkg/<architecture>,例如:$GOPATH/pkg/windows_amd64.

  • 如果它安全而简单,为什么没有go子命令呢? (196认同)
  • 来自npm,我们还有很多东西要去 (54认同)
  • 我对 Go 了解得越多,我就越意识到它在做非常“简单”、“原生”的事情时是多么糟糕。我的意思是,你怎么可能有安装命令但没有删除命令。如何??? (28认同)
  • 起初我找了$ GOPATH/pkg/architecture /哪个不存在.然后我意识到你所指的是$ GOPATH/pkg/{{architecture}},例如$ GOPATH/pkg/windows_amd64. (5认同)
  • 是的,确实如此,那么依赖关系呢? (4认同)
  • 在Mac上:$ GOPATH = $ HOME / go (2认同)
  • 删除原始的 src 和包,然后清理直接依赖项,然后清理它们的依赖项,仍然是安全和简单的。当然,您需要扫描所有导入以确定这些依赖项是什么。但这非常简单,不是吗?/s (如果你使用 go 模块就幸运了:D) (2认同)

che*_*hes 137

您可以删除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
Run Code Online (Sandbox Code Playgroud)

请注意,此信息基于goGo 1.5.1版中的工具.

  • 您如何找到所有项目依赖项? (2认同)
  • 要包含依赖项,请使用“-r”标志。但要注意 - 如果某个依赖项被其他包使用,它仍然会被删除。 (2认同)
  • 它应该与 Go 1.16 一起使用吗?Go 1.16 表示,对于任何已安装的“最新”(“go install foo@latest”)软件包,“没有匹配任何软件包”。 (2认同)

abh*_*ekp 25

一个 go 包可以被删除如下

go get package@none
Run Code Online (Sandbox Code Playgroud)

@none是此处设置为的版本部分none。从而去除包装。

  • 这是一种奇怪的删除包的方法。希望只是“卸载” (20认同)
  • (osx) 没有为我从 `~/go/bin` 中删除二进制文件。没有错误,命令没有输出。 (15认同)
  • 现在你必须使用“go install”来安装全局包,但是“go install ...@none”不起作用。`go install` 仅安装一个二进制文件,因此 `rm "$(which package-name)"` 就足够了。 (8认同)
  • @ZachYoung 尝试“go clean -cache -modcache”。 (5认同)
  • 这是 2021 年的正确答案。很棒的回应 abhisekp! (2认同)
  • GOPATH 模式下不能使用 path@version 语法 (2认同)
  • 可以确认这适用于 go 版本 go1.16.5(当前日期是 2021 年 8 月)。 (2认同)

ecw*_*z91 9

#!/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
}
Run Code Online (Sandbox Code Playgroud)

用法:

# 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
Run Code Online (Sandbox Code Playgroud)


小智 9

您可以go mod tidy用来清理未使用的包

  • 这是可行的,但只能删除模块中的代码中不再引用的模块,使用 Go 版本 &gt;= 1.11+。要删除 go 模块外部通过 go get 或 go install 安装的 go 程序或二进制文件,则必须使用 go clean (4认同)