Golang中运行Hello World程序耗时过长的原因

Golang中运行Hello World程序耗时过长的原因 你好,

我按照这里的步骤在安装Go后进行了操作。然而,运行go run hello.go大约需要20秒才能输出“hello, world”。我也尝试过重新安装,并将我的Go文件夹从Windows Defender(我唯一使用的杀毒软件)中排除。我该如何解决这个问题?任何帮助都将不胜感激。

规格:

  • windows 10
  • intel i7-6700

谢谢!

14 回复

不。

更多关于Golang中运行Hello World程序耗时过长的原因的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我应该如何处理这些信息?

是的。

那么我应该如何配置 Windows Defender 呢?

你安装的是32位还是64位的Go编译器?

当你暂时禁用病毒扫描程序时,是否遇到同样的问题?

忽略临时文件夹没有帮助。我还在我的笔记本电脑上安装了Go,同样是Windows 10系统,使用Windows Defender,也遇到了完全相同的问题。这会不会是一个bug?

go build 是否也和 go run 一样耗时?

正如我所说,我仍然怀疑是病毒扫描程序的问题。

是的,当我关闭实时保护时,也遇到了同样的问题。我已经确认这对编译时间没有影响。

执行本身不是问题(它运行得很好),问题是编译时间过长。我真的不认为一个简单的“Hello World”程序需要超过10秒来编译。

go run 命令不会从你当前所在的位置运行可执行文件,而是会编译到一个临时位置,并在该位置运行可执行文件。

可以尝试使用 go build 命令,然后运行在当前文件夹中生成的可执行文件。

为了你自己好,请在 Linux 环境下进行 Go 开发。

我有一台 Windows 10 笔记本电脑。我安装了 Virtualbox,然后创建了一个 Linux 虚拟机,我在其中进行 Go 相关的工作。

体验非常棒,你可以获得 Linux 图形界面和所有功能。

操作指南在这里:

https://www.dbdr.com/build-a-linux-vm-for-working-with-go/

祝你好运。

根据 https://stackoverflow.com/questions/46570517/where-is-executable-stored-after-go-run-file-go-command,可执行文件存储在 %TEMP% 目录中。在您的病毒扫描程序中忽略此目录可能是一个巨大的问题,我建议不要这样做。

我假设中间文件也会在那里创建。

目前,我看不到在不禁用杀毒软件的情况下解决您的问题的方法。

我的 Go 版本是 go1.13.6 windows/amd64

我已经将 Go 的临时目录更改到了其他位置(而不是排除 %TEMP%),这样它就被排除在 Windows Defender 的扫描范围之外,这显著改善了编译时间。

PS C:\go\src\hello> Measure-Command {go run hello.go}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 7
Milliseconds      : 663
Ticks             : 76633164
TotalDays         : 8.86957916666667E-05
TotalHours        : 0.002128699
TotalMinutes      : 0.12772194
TotalSeconds      : 7.6633164
TotalMilliseconds : 7663.3164

当前的运行时间,与之前提到的 3 秒相比。

这个问题通常与Windows Defender的实时扫描有关。即使您排除了Go文件夹,实时扫描仍可能在程序运行时检查新生成的可执行文件。

您可以尝试以下方法:

  1. 禁用实时扫描测试:临时关闭Windows Defender实时扫描,然后运行程序。如果速度恢复正常,说明是扫描导致的问题。

  2. 添加进程排除:在Windows Defender中,添加go.exego-build相关进程到排除列表。具体路径通常是C:\Program Files\Go\bin\go.exe

  3. 使用go build代替go run:先编译再运行可避免每次运行时都触发扫描。

// hello.go
package main

import "fmt"

func main() {
    fmt.Println("hello, world")
}
go build hello.go
./hello.exe
  1. 检查Go模块代理:如果启用了Go模块,设置国内代理可能加快依赖下载(如果涉及)。
go env -w GOPROXY=https://goproxy.cn,direct
  1. 使用-x标志调试:查看go run具体耗时在哪些步骤。
go run -x hello.go

如果问题仍然存在,请检查是否有其他安全软件干扰,或尝试在命令提示符以管理员身份运行。

回到顶部