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

Posted

技术标签:

【中文标题】go 命令在我的 windows 机器上运行缓慢,在我的 linux 上运行良好【英文标题】:go commands run slow on my windows machine, and fine on my linux 【发布时间】:2019-03-22 16:36:53 【问题描述】:

我不知道其他人是否遇到了这个问题。我有这个 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,还有一些go工具比如fmt。在 linux 上需要 0.12 秒,但在 windows 上几乎需要 3 秒。其他工具如 guru、gocode 等也存在同样的问题,导致代码开发非常缓慢。

我正在使用 golang 1.11。我正在使用 SSD,一切都在本地运行。对不起,我希望我能更有帮助,但我真的不知道从哪里开始调试这个。

有人知道发生了什么吗?

【问题讨论】:

我只在第一次运行时体验到它(运行或构建并运行 exe)。第二次运行是即时的。 顺便说一句,我也有 Goland。如果我在 GoLand 中使用 Goland,它会立即运行,无论是否首先运行。 你运行的是什么版本的 Go? Go1.10 及更高版本改进了构建时间,请参阅 this answer。 您是在 Windows 机器上使用本地驱动器还是网络驱动器? @Husain - 你还在面对这个问题吗?我在同一条船上,我有两台 Windows 笔记本电脑,在一台笔记本电脑上构建只需 2 秒,而在另一台笔记本电脑上则需要 10 秒。两者都是高端笔记本电脑。我尝试禁用防病毒软件,但没有改进,版本 1.11.4 【参考方案1】:

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

【讨论】:

【参考方案2】:

似乎build cache 在您的 Windows 上被禁用并在您的 Linux 上启用。

如果 .go 文件没有改变,Go build 会保留编译结果并重用它。这就是为什么您的第二次构建在 Linux 中如此之快。

如果禁用它,不仅您的代码,而且所有依赖项都必须每次重新编译。因此,即使您更改了代码,所有库(此处为“fmt”)都已在缓存中。

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

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

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

【讨论】:

谢谢弗朗索瓦。但看起来我的 GOCACHE 已经设置好了。所以构建应该被缓存。 我不认为如果两个连续的构建花费这么长时间是有效的,第二个应该是准即时的,就像在 linux 中一样,除非缓存配置有问题。我敢打赌 GOCACHE 文件夹。也许它不存在,或者权限错误。但我可能是错的。您可以在此文件夹中使用执行 go build 的同一用户创建文件吗? 是的。我可以使用相同的用户名创建文件夹。 :/ 我现在猜测是安装了杀毒软件。我不确定,我不能卸载它来测试,因为这是公司的机器。 ://

以上是关于go 命令在我的 windows 机器上运行缓慢,在我的 linux 上运行良好的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Symfony 2 在我的环境中响应非常缓慢?

在 Windows 上安装后无法运行 pear 命令

如何通过 PuTTy 使用命令行将文件从 Windows 机器上传到 Linux 机器?

为啥这个 C 语言中的 SIMD 示例代码可以用 minGW 编译,但可执行文件不能在我的 Windows 机器上运行?

集群 MySQL 环境中运行缓慢的查询

使用 SDL_WINDOW_OPENGL 标志创建缓慢的窗口