【问题标题】:Is it possible to precompile a Go project and run on different Linux distros [duplicate]是否可以预编译 Go 项目并在不同的 Linux 发行版上运行 [重复]
【发布时间】:2017-01-03 16:22:45
【问题描述】:

我是 Go 新手,想知道是否可以在我的计算机上构建我的应用程序,然后放到具有不同 Linux 系统的目标机器上并运行,而无需编译它或其依赖项?

如何确定二进制文件可以在哪些目标系统上运行?

【问题讨论】:

    标签: go compilation


    【解决方案1】:

    如果您在 Linux 机器上构建 go 程序,如果您将其标记为可执行文件 chmod +x /path/to/main.go,它应该可以在其他地方运行。

    您可以使用envgo build cmd 工具指定要为哪个架构(或哪个操作系统)构建,例如:

    env GOARCH=arm go build main.go
    

    如果你愿意,你可以指定 Linux

    env GOOS=linux go build main.go
    

    注意,这些是 target 环境:

    请注意,$GOARCH 和 $GOOS 标识目标环境,而不是您正在运行的环境。实际上,您总是在交叉编译。架构是指目标环境可以运行的二进制文件类型:运行仅 32 位操作系统的 x86-64 系统必须将 GOARCH 设置为 386,而不是 amd64。

    有关发行版和架构的完整列表,请参见此处: https://golang.org/doc/install/source#environment

    【讨论】:

      【解决方案2】:

      请注意,在 Linux 操作系统上编译的 Go 二进制文件可以在其他 Linux 发行版上运行。

      如果 Docker 是一个选项,您可以考虑使用 DockerHub 上的 Go Docker 映像之一。您可以基于<go-version>-onbuild 映像之一创建一个 Dockerfile,或者在您的计算机上构建您的应用程序,然后将COPY 二进制文件转移到基于您选择的 Linux 发行版的映像之一。

      onbuild 图像构建并运行您的应用程序。你可以查看它的 Dockerfile here。我看到团队使用第二种方法在 golang-alpine Docker 容器中分别构建和运行应用程序二进制文件以减少生产映像的大小。

      否则,你可以使用 Go 内置的cross-compilation support,归结为:

      1. GOOSGOARCH 环境变量设置为目标操作系统和体系结构的值。
      2. 运行go build -v YOURPACKAGE

      请参阅 here 以获取支持的 GOOSGOARCH 值的列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        • 2021-04-07
        • 2011-03-04
        • 1970-01-01
        相关资源
        最近更新 更多