【问题标题】:Go: How does go run file.go workGo: go run file.go 是如何工作的
【发布时间】:2015-02-27 01:18:36
【问题描述】:

命令go buildgo install 将文件编译成二进制文件。 go run 是否编译或解释文件?我在网上找不到解释,可能错过了。欣赏指点。谢谢!

【问题讨论】:

  • 查看go help run 解释命令。
  • 运行任何带有-x 选项的命令将显示所有已执行的命令。

标签: go


【解决方案1】:

这或多或少相当于运行go build X.go -o /tmp/random-tmp-folder/exe && /tmp/random-tmp-folder/exe

【讨论】:

  • 输入go run temp.go 后不知何故运行了两个进程,一个说用于运行它的命令是go run temp.go,另一个看起来更像你说的
  • 这是程序 func main() { http.HandleFunc("/", hello) http.ListenAndServe(":8000", nil) }
  • @Curious 这就是重点,go run 将执行此操作并在实际进程退出时完成运行。
  • golang创建的这些临时文件的默认位置在哪里?
  • 默认是系统的tmp目录,在*nix上通常是/tmp
【解决方案2】:

go run 命令编译并运行由命令行指定的 .go 文件组成的主包。该命令被编译到一个临时文件夹中。

go buildgo install 检查目录中的文件以确定哪些 .go 文件包含在主包中。

【讨论】:

    【解决方案3】:

    命令go run 在后台执行项目的构建(所以是的,它构建项目)
    使用标志 --work (go run --work main.go),您可以看到临时构建文件的位置。

    您还可以在官方文档 (go1.11) 中找到:

    go run - 编译并运行指定的主 Go 包。

    go build - 编译由导入路径命名的包, 连同它们的依赖关系,但它不会安装结果。

    go install - 编译并安装导入路径命名的包。

    【讨论】:

      【解决方案4】:

      与在执行时创建和解释字节码的 java 中不同,go 创建一个依赖于正在使用的机器的可执行文件,就像在 c、c++ 中一样。

      【讨论】:

      • 在 Java 中,执行时不会生成字节码。它是在编译期间(javac 命令)在编译代码的机器上生成的。字节码与平台无关。依赖于平台的特定 JVM 实现将负责运行代码。
      猜你喜欢
      • 2013-10-14
      • 2014-02-13
      • 1970-01-01
      • 2017-06-13
      • 2014-12-12
      • 1970-01-01
      • 2014-11-29
      • 2015-12-08
      • 2015-03-28
      相关资源
      最近更新 更多