go命令在Windows计算机上运行缓慢,在Linux上运行良好

时间:2018-10-17 22:13:09

标签: windows go

我不知道是否有人遇到了这个问题。我有这个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,并且一切都在本地运行。抱歉,我希望我能对您有所帮助,但我真的不知道从哪里开始调试它。

有人知道发生了什么吗?

1 个答案:

答案 0 :(得分:0)

似乎build cache在Windows上已禁用,而在Linux上已启用。

Go build保留编译结果,如果.go文件未更改,则重新使用它。这就是为什么您的第二个版本在Linux中如此之快的原因。

如果禁用它,则不仅必须重新编译代码,而且还必须重新编译所有依赖关系。因此,即使您更改代码,所有库(此处为“ fmt”)也已经在缓存中。

要对其进行测试,请在Linux上的go clean -cache之前运行go build,然后查看时间是否与Windows上的时间相对应。然后,如果匹配,则必须找出为什么在Windows上禁用了构建缓存。

您可以通过键入go env GOCACHE来查看缓存目录。如果响应关闭,则缓存关闭。否则,请验证存储库是否存在并且具有正确的权限。

您可以通过设置GOCACHE环境变量的值来选择缓存目录(抱歉,我不知道如何在Windows中执行此操作)。