安装新版Go后,“go build”变得非常缓慢

时间:2014-06-21 12:33:47

标签: go

从Go 1.2.1升级到1.3(Windows 7 64位)后,“go build”执行时间从大约4秒增加到超过45秒。除了go版本更新之外没有其他更改。关闭病毒扫描程序似乎没有任何效果。有线索吗?

7 个答案:

答案 0 :(得分:58)

您可能每次都有重新编译的依赖项。尝试go install -a mypackage重建所有依赖项。

删除$GOPATH/pkg也有助于确保您没有旧的目标文件。

使用-x标志构建将显示工具链是否找到不兼容的版本。

答案 1 :(得分:24)

我有完全相同的问题,运行此命令解决了它:

go get -u -v github.com/mattn/go-sqlite3

另一个提示:http://kokizzu.blogspot.co.id/2016/06/solution-for-golang-slow-compile.html

答案 2 :(得分:18)

使用go1.6,

只需运行go build -i

它将编译所有依赖项并将它们存储在$GOPATH/pkg/*/*作为 .a 文件。

稍后当你运行go run main.go时,一切都会快得多。

如果您使用vendored依赖项(IE:项目中的供应商文件夹),那么真正伟大的是,deps在$GOPATH/pkg/**/yourproject/vendor/**

中正确构建

所以你不必go get install/get/whatever并且混合了供应商/全球依赖。

我怀疑你必须在deps更新后重新构建 .a 文件(滑动更新或smthg这样),但我还没有测试过。

答案 3 :(得分:3)

我刚刚遇到了同样的问题 - 从1.4升级到1.5。似乎旧版本在某种程度上是不兼容的,或者每次都在go build -x显示时重建。执行go get -v会使所有包无效或重新获取它们,我不太确定,go build -x显示的输出量非常少。

答案 4 :(得分:3)

在Go 1.10之后,您只需输入go build即可。您无需输入:go build -i

  

从Go 1.10草案文档here

           

构建&安装

     

go build命令现在可以完全基于源文件的内容,指定的构建标志和存储在已编译包中的元数据来检测过时的包。修改时间不再被咨询或相关。 在不再需要修改时间因某种原因而误导的情况下(例如,构建标志中的更改),添加-a以强制重建的旧建议:现在,构建始终会检测到必须重建包。 (如果您另有说明,请提交错误。)

     

...

     

go build命令现在维护一个最近构建的包的缓存,与$ GOROOT / pkg或$ GOPATH / pkg中已安装的包分开。缓存的效果应该是加速构建不显式安装包或在源代码的不同副本之间切换时(例如,在版本控制系统中的不同分支之间来回切换时)。 不再需要像go build -i或go test -i那样为速度添加-i标志的旧建议:不使用-i,构建运行速度一样快。有关更多详细信息,请参阅go help cache。

答案 5 :(得分:1)

您可以像这样构建sqlite3:

cd ./vendor/github.com/mattn/go-sqlite3/
go install

之后,您的项目将更快地构建。

答案 6 :(得分:-3)

如果您尝试所有其他人但仍然无效,我建议删除$GOPATH目录,例如:

sudo rm -rf $GOPATH
cd yourproject 
go get -d
go get -u -v github.com/mattn/go-sqlite3