Golang中运行Hello World程序耗时过长的原因
Golang中运行Hello World程序耗时过长的原因 你好,
我按照这里的步骤在安装Go后进行了操作。然而,运行go run hello.go大约需要20秒才能输出“hello, world”。我也尝试过重新安装,并将我的Go文件夹从Windows Defender(我唯一使用的杀毒软件)中排除。我该如何解决这个问题?任何帮助都将不胜感激。
规格:
- windows 10
- intel i7-6700
谢谢!
我应该如何处理这些信息?
当你暂时禁用病毒扫描程序时,是否遇到同样的问题?
忽略临时文件夹没有帮助。我还在我的笔记本电脑上安装了Go,同样是Windows 10系统,使用Windows Defender,也遇到了完全相同的问题。这会不会是一个bug?
go build 是否也和 go run 一样耗时?
正如我所说,我仍然怀疑是病毒扫描程序的问题。
是的,当我关闭实时保护时,也遇到了同样的问题。我已经确认这对编译时间没有影响。
执行本身不是问题(它运行得很好),问题是编译时间过长。我真的不认为一个简单的“Hello World”程序需要超过10秒来编译。
go run 命令不会从你当前所在的位置运行可执行文件,而是会编译到一个临时位置,并在该位置运行可执行文件。
可以尝试使用 go build 命令,然后运行在当前文件夹中生成的可执行文件。
根据 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文件夹,实时扫描仍可能在程序运行时检查新生成的可执行文件。
您可以尝试以下方法:
-
禁用实时扫描测试:临时关闭Windows Defender实时扫描,然后运行程序。如果速度恢复正常,说明是扫描导致的问题。
-
添加进程排除:在Windows Defender中,添加
go.exe和go-build相关进程到排除列表。具体路径通常是C:\Program Files\Go\bin\go.exe。 -
使用
go build代替go run:先编译再运行可避免每次运行时都触发扫描。
// hello.go
package main
import "fmt"
func main() {
fmt.Println("hello, world")
}
go build hello.go
./hello.exe
- 检查Go模块代理:如果启用了Go模块,设置国内代理可能加快依赖下载(如果涉及)。
go env -w GOPROXY=https://goproxy.cn,direct
- 使用
-x标志调试:查看go run具体耗时在哪些步骤。
go run -x hello.go
如果问题仍然存在,请检查是否有其他安全软件干扰,或尝试在命令提示符以管理员身份运行。


