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 上运行良好的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 PuTTy 使用命令行将文件从 Windows 机器上传到 Linux 机器?
为啥这个 C 语言中的 SIMD 示例代码可以用 minGW 编译,但可执行文件不能在我的 Windows 机器上运行?