新的Go程序员通常不知道或搞不懂基本的go build命令是做什么的。
go build
和go install
命令究竟构建什么,它们将结果/输出放在哪里?
发布于 2017-11-04 18:46:10
对于包:
go build
:构建包,然后丢弃结果
多亏了CL 68116和CL 75473,在Go 1.10 (Q1 2018)之后,这就不是真的了。请参阅我在此处引用的this thread。
go build
和go install
命令到底做什么每当go工具安装一个软件包或二进制文件时,它也会安装它的任何依赖项,所以运行go install也会自动安装你的程序所依赖的软件包(公开可用的,"go gettable“软件包)。
实际上..。除了新的缓存之外,go install
还将在Go 1.10中发生变化:
"
go install
“命令不再安装命名包 (CL 75850)的依赖项。
如果您运行"**go install foo
**",,则只安装了foo
. 在此之前,情况有所不同。如果依赖项过期,"go install
“还会安装任何依赖项。
在"go install
“期间隐式安装依赖项给用户带来了很多困惑和头疼,但在此之前必须启用增量构建。
不再是了。
我们认为,新的"install what I said
“语义将更容易理解,特别是从bug报告中可以清楚地看出,许多用户已经预期到了它们。
通过类比"go build -i
“和"go test -i
”,在"**go install
**",期间强制安装依赖项的使用新的"**go install -i
**",。
"go install
“用于安装任何重新构建的依赖项,这一事实通常与-a
(意为"force rebuild of all dependencies
”)一起使用时会引起混淆。
现在,"go install -a myprog
“将强制完全重建myprog
的所有依赖项,以及myprog
本身,但只会安装myprog
。(当然,所有重新构建的依赖项仍将保存在构建缓存中。)
与新的基于内容的陈旧分析一起使用时,让这种情况更容易理解是特别重要的,因为它看到了比以前更频繁地重新构建依赖关系的充分理由,这将增加“为什么安装我的依赖关系”的困惑。
例如,如果您运行"go install -gcflags=-N myprog
",它将安装一个在没有编译器优化的情况下构建的myprog
,但它也不再重新安装myprog
在没有编译器优化的情况下从标准库使用的包。
https://stackoverflow.com/questions/30612611
复制相似问题