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

时间:2017-12-30 10:57:49

标签: performance go

我有一点问题,每次我跑步时都要运行> filename<'在对我的问题进行更改后,开始执行需要几秒钟。

我尝试使用这样一个简单的程序:

package main

import "fmt"

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

打印结果花了大约18秒钟。

关于什么可能导致这个问题的想法?

顺便说一句,我在窗户上。

先谢谢

2 个答案:

答案 0 :(得分:3)

$ go run命令始终将代码符合临时二进制文件,然后在每次运行时执行它。

要解决这个问题,你可以做$ go build -i main.go,它将作为.a文件单独编译依赖项(我猜这是最长的部分,因为它需要时间来构建依赖项)和然后用$ ./main执行它,每次执行应该比$ go run快。

您还可以运行$ go get -u ./...来更新所有deps,使用-x标志构建将显示工具链是否找到不兼容的版本。

$ go install在临时目录中构建命令,然后将其移动到$ GOPATH / bin,这样您就可以在不使用路径$ main的情况下执行它。

如果代码有变化,最后两个命令需要重建/重新安装。

答案 1 :(得分:1)

在MacOS(OSX)Catalina上使用新编译的golang二进制文件遇到相同问题时发现了此问题。

简而言之,操作系统现在会扫描新的二进制文件以查找恶意软件,通常是在首次启动时执行此操作,但是我发现它连续执行了3-5次,此后二进制文件被列入了白名单。并正常开始显然,一旦对代码进行了更改并重新编译,扫描就会再次发生。扫描过程最多需要20秒,这会破坏golangs的快速迭代周期。

对我来说解决方法如下:

sudo spctl developer-mode enable-terminal

然后转到首选项->安全和隐私->隐私

在左侧的列表中,您现在将具有“开发人员工具”部分,其中列出了OSX内置终端。选中该复选框以启用它,和/或添加您可能要用来开发的其他任何内容(iTerm,VS Code等)

从这些应用程序运行二进制文件时,扫描停止,并且一切恢复正常。