为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
交互式爱情 2022-03-03 19:52:49
我是 Go 新手,想知道是否可以在我的计算机上构建我的应用程序,然后放在具有不同 Linux 系统的目标机器上并运行而无需编译它或其依赖项?如何确定二进制文件可以在哪些目标系统上运行?
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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

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

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

否则,您可以使用 Go 内置的交叉编译支持,归结为:

  1. GOOSGOARCH环境变量设置为目标操作系统和体系结构的值。

  2. 跑步go build -v YOURPACKAGE

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


查看完整回答
反对 回复 2022-03-03
?
湖上湖

TA贡献2003条经验 获得超2个赞

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

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

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


查看完整回答
反对 回复 2022-03-03
  • 2 回答
  • 0 关注
  • 458 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号