Golang Go语言多平台打包发布探讨

发布于 1周前 作者 songsunli 来自 Go语言

迫于尝试给一个 Go 项目贡献打包跨平台 Docker 镜像花了两个小时没搞通,于是把整个过程捋了一遍,写了一个演示如何使用 GitHub Actions 将一个 Golang 项目打包成多平台的二进制文件并发布到 GitHub Releases 和 DockerHub 的例子。

不得不说,Go 跨平台编译这个能力实在是太强了。

LeslieLeung/go-multiplatform-docker

欢迎 star 。


Golang Go语言多平台打包发布探讨

更多关于Golang Go语言多平台打包发布探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

10 回复

没这么麻烦吧,gorelease 不是分分钟就解决了。

更多关于Golang Go语言多平台打包发布探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


用 GitHub Actions 的话直接开一堆平台的虚拟机,不是连交叉编译都不需要了吗…

就薅吧就薅吧

可以看看 gox

蛮有用的介绍。刚玩了玩,不知道是我的项目有什么特殊之处还是?…… binary release 那个部分的写法在我的仓库上权限不足(最后一步发布到 release 失败)

自己研究了一下之后在 yml 里面补上了赋予 secrets.GITHUB_TOKEN 所需权限的设置:

permissions:
contents: write

然后就能发布成功了

代码缩进被吞了……总之就这两行应该很好看懂……

比如同时支持 arm v5 v7 和 arm 64 还用了 CGO 有没有合适的方案

哦对就是这个,我也想改这个设置来着,但是 github 今天有 bug ,保存设置的时候显示数据类型不匹配 save 失败(无论怎么选,前端调接口传的 0 和 1 ,后端要求输入是 true 和 false )

然后我研究了下,用上面的方法能成功。
btw ,直接改设置会赋予 job 对仓库内所有功能的 write 权限,像上面那样写可以确保只给必要的最小权限,官方文档里更推荐后者。

在Golang(Go语言)中,多平台打包发布是一项非常实用的技能,它得益于Go语言的静态编译特性和跨平台编译能力。以下是对Go语言多平台打包发布的探讨:

Go语言通过设置GOOS(目标操作系统)和GOARCH(目标处理器架构)两个环境变量,可以轻松地生成适用于不同平台的可执行文件。例如,要编译一个Go程序以在Windows平台的amd64架构上运行,只需设置GOOS=windows和GOARCH=amd64,然后执行go build命令。同样,对于Linux和macOS平台,也可以通过设置相应的GOOS和GOARCH值来生成可执行文件。

为了简化多平台编译过程,可以编写脚本或使用工具来自动化这一过程。例如,可以编写Shell脚本来循环遍历不同的平台组合,并设置相应的GOOS和GOARCH值,然后执行go build命令生成可执行文件。此外,还可以使用GoReleaser等开源工具来自动化多平台二进制文件的构建、打包和发布。

在打包发布时,还需要考虑依赖项和环境变量的配置。由于Go语言的编译器会静态链接所有的依赖库,所以不需要在目标服务器上安装任何额外的软件包或库。但是,如果程序依赖于外部配置文件或环境变量,则需要在目标服务器上正确配置这些依赖项。

此外,使用Docker容器也是一种有效的多平台打包发布方式。通过创建一个Dockerfile来定义Docker镜像的构建规则,然后将Go应用程序及其依赖项打包到一个独立的容器中。这样,可以在不同的平台上运行相同的Docker镜像,从而实现跨平台部署。

总之,Go语言的多平台打包发布功能非常强大且灵活,可以大大提高开发效率和部署便捷性。

回到顶部