我使用go get -u
来获取一个依赖于golang.org/x/text@v0.3.7
的包。我注意到它首先下载golang.org/x/text@v0.3.7
,然后下载golang.org/x/text@v0.4.0
。
然后运行go clean -modcache
和go get golang.org/x/text
,下载了golang.org/x/text
的v0.4.0
,然后又下载了go get -u entgo.io/ent
,这次go没有下载golang.org/x/text@v0.3.7
那么,为什么go get -u
在本地没有最新版本时同时下载旧版本和最新版本,以及为什么在本地有最新版本时不下载旧版本?
1条答案
按热度按时间yc0p9oo01#
因为这是一个两步的过程
1.正在取得相依性
1.更新依赖关系
从编程的Angular 来看,没有充分的理由将这些合并到“获取最新依赖项”的单个关注点中。
在go命令文档中:
-u标志指示get更新提供命令行上指定的包的依赖关系的模块,以使用更新的次要版本或修补程序版本(如果可用)。
这意味着
-u
专门处理你要得到的包所依赖的模块,而不是你要得到的包的模块。此外,
-u
似乎不支持将v0
版本中的任何变化都视为主要版本变化的Go语言习惯,因此我们不能轻率地推荐使用-u
,因为README of golang.org/x/test甚至会说:在x/text达到1.0.0版本之前,次要版本被认为是主要版本。所以从0.1.0到0.2.0被认为是主要版本的升级。