完全删除使用“go get”安装的软件包?
Posted
技术标签:
【中文标题】完全删除使用“go get”安装的软件包?【英文标题】:Completely remove a package installed with "go get"? 【发布时间】:2020-02-02 02:24:31 【问题描述】:我使用的是今天最新的 Go 1.13.1。
我正在尝试从 GitHub 中完全删除我使用 go get
安装的软件包。 go clean -i <PACKAGE_NAME>
似乎不起作用,因为至少有文件分布在这些目录中:
~/go/pkg/mod/github.com/<PACKAGE_NAME>
~/go/pkg/mod/cache/download/github.com/<PACKAGE_NAME>
~/go/pkg/mod/cache/download/sumdb/sum.golang.org/lookup/github.com/<PACKAGE_NAME>
有没有办法在不手动删除所有内容的情况下清理所有内容?
【问题讨论】:
古玩:为什么?这些文件是否会导致问题? 为什么git clean
会影响 go 缓存?
@Flimzy 这对我来说很有意义,如果我删除一个包,它的所有文件都会被删除。
@JimB 不,文件不存储在存储库文件夹中,它们被埋在~/go
中。
@Rodrigo:那么没有真正的理由吗?然后别担心。缓存文件会保留,但不会造成伤害。真正清理它们的唯一方法是删除你的缓存,你当然可以这样做,但是下次你会损害其他包的构建性能。当您访问网站时也会发生同样的事情。仅仅因为您离开或删除书签,并不意味着缓存页面被删除。
【参考方案1】:
目前不支持此功能。如果您考虑一下:可能是当前模块不再需要它,但您的系统上可能还有其他(不相关的)模块可能仍然需要它。模块缓存在系统上的所有模块之间“共享”;它可以共享,因为依赖是版本化的,如果两个不相关的模块引用了一个模块/包的相同版本,它是相同的并且可以共享。
最接近的是go clean
和-modcache
,但这会删除整个模块缓存:
-modcache 标志导致 clean 删除整个模块下载缓存,包括版本化依赖项的解压缩源代码。
【讨论】:
知道为什么采用这种方法,而不是 NPM 的方法吗?无论如何,最好有一个工具来分析缓存和清理孤立包。 @Rodrigo 答案是:因为模块缓存是“共享的”,对所有模块都是通用的。您无法编写工具来分析模块缓存,因为在缓存中引用/需要包的模块实际上可能在您计算机中的任何位置,甚至在甚至没有始终连接到您的系统的闪存驱动器上。 我自己来自 npm 世界,我发现 go 管理包的方式令人沮丧。在每个应用程序的基础上管理包对我来说更有意义,这似乎是世界的发展方向:pyenv
和nvm
等工具不仅可以轻松管理包,还可以轻松管理整个堆栈以每个应用程序为基础。
@LaneRettig 就个人而言,与基于每个应用程序的基础相比,我更喜欢全局管理多个版本,我不希望在每个项目中都有大约 GB 的 go_modules
。虽然我同意应该提供一种开箱即用的方法来删除全局安装的这些依赖项。以上是关于完全删除使用“go get”安装的软件包?的主要内容,如果未能解决你的问题,请参考以下文章