是否可以预编译Go项目并在不同的Linux发行版上运行

时间:2016-08-26 22:59:48

标签: go compilation

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

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

2 个答案:

答案 0 :(得分:0)

如果你在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

注意,这些是目标环境:

  

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

请点击此处查看发行版和架构的完整列表: https://golang.org/doc/install/source#environment

答案 1 :(得分:0)

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

如果Docker是一个选项,您可以考虑在DockerHub上使用其中一个Go Docker镜像。您可以根据<go-version>-onbuild图像之一创建Dockerfile,也可以在计算机上构建应用程序,然后将COPY二进制文件覆盖到一个基于您选择的Linux发行版的图像上。 / p>

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

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

  1. GOOSGOARCH环境变量设置为目标操作系统和体系结构的值。
  2. 运行go build -v YOURPACKAGE
  3. 请参阅here以获取支持的GOOSGOARCH值列表。