`go build` 不必要地重建

go build 和 go run 在我拥有的一个小程序上非常慢(特别是 cgo 调用)。我想缓存二进制文件,以便它只在源更新时重建。我会使用带有 % 规则的简单 Makefile,但语言设计者声称 go 的构建支持不需要 Makefile。

我忽略了另一种选择吗?Go 社区是否更喜欢另一个构建系统,也许是基于哈希的,用于缓存和重用构建产品?


喵喔喔
浏览 193回答 2
2回答

茅侃侃

go build并且go install很快(Go 1.10,2018 年第一季度)会快得多:请参阅此主题和此草稿文件。go 命令现在维护已构建包和其他小元数据的缓存(CL 68116和CL 75473)。缓存默认为操作系统定义的用户缓存目录,但可以通过设置移动$GOCACHE。运行“ go env GOCACHE”查看当前有效设置。现在 go 命令永远不会从缓存中删除任何内容。如果缓存变得太大,请运行“ go clean -cache”而不是删除目录。该命令将保留缓存的log.txt文件。几周后,我会要求人们将他们的log.txt文件发布到 Github 问题,以便我们可以评估缓存大小管理方法。构建缓存的主要作用是像 " go test" 和 " go build"这样的命令运行得很快,并且总是进行增量构建,尽可能积极地重用过去的构建步骤。您不必使用“ go test -i”或“ go build -i”或“ go install”来获得快速增量构建。我们将不再需要教新用户这些变通方法。一切都会很快。请注意,go install不会安装指定的软件包的依赖关系:见“什么go build建设? ”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go