![](/img/trans.png)
[英]My program crashes on the Windows machine yet it works fine on the 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.