繁体   English   中英

go 命令在我的 Windows 机器上运行缓慢,在我的 linux 上运行良好

[英]go commands run slow on my windows machine, and fine on my linux

我不知道其他人是否遇到了这个问题。 我有这个 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

这不仅是build,还有fmt等一些go工具。 在 linux 上需要 0.12 秒,但在 windows 上几乎需要 3 秒。 其他工具如 guru、gocode 等也遇到同样的问题,使得代码开发非常缓慢。

我正在使用 golang 1.11。 我正在使用 SSD,一切都在本地运行。 抱歉,我希望我能提供更多帮助,但我真的不知道从哪里开始调试。

有谁知道发生了什么?

似乎在Windows上禁用了构建缓存 ,在Linux上启用了该缓存

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

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

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

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

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

我有同样的问题。 原来我有一个非常大的目录,在二进制文件所在的同一位置有 1000 个大文件。 将大目录移到其他位置解决了该问题。 这是在 macOS 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM