我不知道是否有人遇到了这个问题。我有这个main.go文件:
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
当我运行go build时,它需要5秒钟才能运行(无论是第一次还是第二次)
PS> Measure-Command {Start-Process go build -wait}
Days : 0
Hours : 0
Minutes : 0
Seconds : 5
Milliseconds : 151
Ticks : 51514117
TotalDays : 5.96228206018519E-05
TotalHours : 0.00143094769444444
TotalMinutes : 0.0858568616666667
TotalSeconds : 5.1514117
TotalMilliseconds : 5151.4117
但是当我在Linux机器上运行它时:
time go build
real 0m2.017s
user 0m0.054s
sys 0m1.915s
当我第二次运行它时:
time go build
real 0m0.120s
user 0m0.072s
sys 0m0.088s
这不仅是内部版本,还包括一些fmt之类的go工具。在Linux上花费0.12秒,而在Windows上花费将近3秒。其他工具(例如guru,gocode等)也会遇到相同的问题,从而使代码开发非常缓慢。
我正在使用golang 1.11。我正在使用SSD,并且一切都在本地运行。抱歉,我希望我能对您有所帮助,但我真的不知道从哪里开始调试它。
有人知道发生了什么吗?
答案 0 :(得分:0)
似乎build cache在Windows上已禁用,而在Linux上已启用。
Go build保留编译结果,如果.go文件未更改,则重新使用它。这就是为什么您的第二个版本在Linux中如此之快的原因。
如果禁用它,则不仅必须重新编译代码,而且还必须重新编译所有依赖关系。因此,即使您更改代码,所有库(此处为“ fmt”)也已经在缓存中。
要对其进行测试,请在Linux上的go clean -cache
之前运行go build
,然后查看时间是否与Windows上的时间相对应。然后,如果匹配,则必须找出为什么在Windows上禁用了构建缓存。
您可以通过键入go env GOCACHE
来查看缓存目录。如果响应关闭,则缓存关闭。否则,请验证存储库是否存在并且具有正确的权限。
您可以通过设置GOCACHE环境变量的值来选择缓存目录(抱歉,我不知道如何在Windows中执行此操作)。