如果依赖项过时,“ go install”也会安装任何依赖项。
在“ go install”期间隐式安装依赖项给用户带来了很多困惑和麻烦,但是以前需要启用增量构建。
不再是了。
我们认为新的“ install what I said”语义将更容易理解,特别是从 bug 报告中可以清楚地看出,许多用户已经预料到了这一点。 要在“ go install”期间强制安装依赖项,可以使用新的“ go install -i” ,类似于“ go build -i”和“ go test -i”。
事实上,“ go install”用于安装任何重新构建的依赖项,这通常与 -a(意思是“ force rebuild of all dependencies”)一起造成混淆。
现在,“ go install -a myprog”将强制重建 myprog的所有依赖项,以及 myprog本身,但只有 myprog将得到安装。(当然,所有重新构建的依赖项仍将保存在构建缓存中。)
让这个案例更容易理解,与新的基于内容的陈旧分析结合起来尤其重要,因为它看到了比以前更频繁地重建依赖关系的好理由,这会增加“为什么我的依赖关系被安装”的混淆。
例如,如果您运行“ go install -gcflags=-N myprog”,它会安装一个没有经过编译器优化而构建的 myprog,但是它不再重新安装未经编译器优化而从标准库中使用的包 myprog。