$ go run命令总是将代码编译到临时二进制文件中,然后在每次运行时执行该文件。 要绕过这个问题,您可以执行$ go build -i main.go,它将依赖项单独编译为.a文件(我猜这是花费时间最长的部分,因为构建依赖项需要时间),然后使用$ ./main执行它,每次执行都应该比$ go run快。 你也可以运行一个$ go get -u ./...来更新你所有的deps,如果工具链发现了不兼容的版本,那么使用-x标志进行构建会显示出来。 $ go install在临时目录中构建命令,然后将其移动到$GOPATH/bin,这样您就可以在没有路径$ main的情况下执行该命令。 如果代码发生更改,则最后两个命令需要重新构建/重新安装。
3条答案
按热度按时间au9on6nz1#
在MacOS(OSX) Catalina 上新编译的golang二进制文件遇到相同问题时发现此问题。
简而言之,操作系统现在扫描一个新的(对它)二进制恶意软件,它通常在第一次启动时这样做,但我发现它是连续做3-5次,之后二进制进入白名单,并正常启动。显然,一旦你对代码进行更改,并重新编译扫描开始再次发生。扫描将需要20秒以上,这破坏了golang的快速迭代周期。
我的解决方案如下:
然后转到首选项-〉安全和隐私-〉隐私
在左边的列表中,你现在会看到“开发工具”部分,其中会列出OSX内置终端。选中复选框以启用它,和/或添加任何其他你可能用来开发的东西(iTerm,VS代码等)
当从这些应用程序运行二进制文件时,扫描停止,一切恢复正常。
oyt4ldly2#
$ go run
命令总是将代码编译到临时二进制文件中,然后在每次运行时执行该文件。要绕过这个问题,您可以执行
$ go build -i main.go
,它将依赖项单独编译为.a
文件(我猜这是花费时间最长的部分,因为构建依赖项需要时间),然后使用$ ./main
执行它,每次执行都应该比$ go run
快。你也可以运行一个
$ go get -u ./...
来更新你所有的deps,如果工具链发现了不兼容的版本,那么使用-x标志进行构建会显示出来。$ go install
在临时目录中构建命令,然后将其移动到$GOPATH/bin,这样您就可以在没有路径$ main
的情况下执行该命令。如果代码发生更改,则最后两个命令需要重新构建/重新安装。
7cwmlq893#
如果有人在windows上仍然面临这个问题,你可以用两种方法来解决它。
方法1:关闭病毒和威胁防护设置中的实时防护
方法2:在病毒和威胁防护设置中转到例外项并添加以下三个文件夹
1.安装Go的文件夹。