Golang - go运行需要很长时间才能执行

ryoqjall  于 2022-12-20  发布在  Go
关注(0)|答案(3)|浏览(362)

我有一个小问题,每次我运行'go run〉filename〈'在对我的问题进行更改后,它需要很多秒才能开始执行。
我用这样一个简单的程序试过了:

package main

import "fmt"

func main() {
    fmt.Println("Output")
}

打印出结果大约花了18秒。
以及可能导致此问题的原因?
顺便说一句,我在Windows上。
提前致谢

au9on6nz

au9on6nz1#

在MacOS(OSX) Catalina 上新编译的golang二进制文件遇到相同问题时发现此问题。
简而言之,操作系统现在扫描一个新的(对它)二进制恶意软件,它通常在第一次启动时这样做,但我发现它是连续做3-5次,之后二进制进入白名单,并正常启动。显然,一旦你对代码进行更改,并重新编译扫描开始再次发生。扫描将需要20秒以上,这破坏了golang的快速迭代周期。
我的解决方案如下:

sudo spctl developer-mode enable-terminal

然后转到首选项-〉安全和隐私-〉隐私
在左边的列表中,你现在会看到“开发工具”部分,其中会列出OSX内置终端。选中复选框以启用它,和/或添加任何其他你可能用来开发的东西(iTerm,VS代码等)
当从这些应用程序运行二进制文件时,扫描停止,一切恢复正常。

oyt4ldly

oyt4ldly2#

$ go run命令总是将代码编译到临时二进制文件中,然后在每次运行时执行该文件。
要绕过这个问题,您可以执行$ go build -i main.go,它将依赖项单独编译为.a文件(我猜这是花费时间最长的部分,因为构建依赖项需要时间),然后使用$ ./main执行它,每次执行都应该比$ go run快。
你也可以运行一个$ go get -u ./...来更新你所有的deps,如果工具链发现了不兼容的版本,那么使用-x标志进行构建会显示出来。
$ go install在临时目录中构建命令,然后将其移动到$GOPATH/bin,这样您就可以在没有路径$ main的情况下执行该命令。
如果代码发生更改,则最后两个命令需要重新构建/重新安装。

7cwmlq89

7cwmlq893#

如果有人在windows上仍然面临这个问题,你可以用两种方法来解决它。
方法1:关闭病毒和威胁防护设置中的实时防护
方法2:在病毒和威胁防护设置中转到例外项并添加以下三个文件夹

  1. C:\用户\活动\应用程序数据\本地\正式构建
  2. C:\用户\应用程序\本地\临时
    1.安装Go的文件夹。

相关问题