为什么在生产环境中运行 Go 应用程序时建议使用 `go build` 而不是 `go run`?

use*_*317 -2 go

我有一个 Dockerfile,用于使用go build. 我研究过,确实go build被推荐用于生产。

但是,我找不到关于原因的正确答案。

我了解go run创建一个临时文件,该文件会在应用程序终止时进行清理。但是如果我使用 Docker,为什么用go run代替不好go build

Adr*_*ian 9

几个原因:

  • Go 应用程序不需要 Go 工具链,就像 C 应用程序不需要gcc. 如果你使用go build,你可以只部署一个二进制文件;如果使用go run,则必须安装工具链。
  • go run 每次运行时都不必要地编译应用程序,从而增加了启动时间。
  • go run 将应用程序分叉到一个新进程,通过隐藏 PID 和退出状态使进程管理变得不必要地复杂。
  • go run当您只想运行应用程序时,有可能意外吸收代码更改。go build仅当您想要一个新的二进制文件时才使用允许您每次都重新运行相同的、一致的二进制文件,而不会发生意外的变化。