Go 博客
Go on ARM and Beyond
最近业界都在热议非 x86 处理器,所以我们认为有必要简要介绍一下 Go 对它们的[支持](https://zh.wikipedia.org/wiki/Go%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80)。
对我们来说,Go 的可移植性一直很重要,不应该过度偏向于任何特定的操作系统或架构。Go 的[首个开源版本](https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html)包含了对两个操作系统(Linux 和 Mac OS X)以及三种架构(64 位 x86、32 位 x86 和 32 位 ARM)的支持。
多年来,我们增加了对更多操作系统和架构组合的支持。
- Go 1(2012 年 3 月)支持最初的系统,以及 FreeBSD、NetBSD 和 OpenBSD 的 64 位和 32 位 x86,以及 Plan 9 的 32 位 x86。
- Go 1.3(2014 年 6 月)增加了对 Solaris 的 64 位 x86 支持。
- Go 1.4(2014 年 12 月)增加了对 Android 的 32 位 ARM 支持,以及 Plan 9 的 64 位 x86 支持。
- Go 1.5(2015 年 8 月)增加了对 Linux 的 64 位 ARM 和 64 位 PowerPC 支持,以及 iOS 的 32 位和 64 位 ARM 支持。
- Go 1.6(2016 年 2 月)增加了对 Linux 的 64 位 MIPS 支持,以及 Android 的 32 位 x86 支持。它还为 Linux 的 32 位 ARM 添加了官方二进制下载,主要用于 Raspberry Pi 系统。
- Go 1.7(2016 年 8 月)增加了对 Linux 的 z Systems (S390x) 支持,以及 Plan 9 的 32 位 ARM 支持。
- Go 1.8(2017 年 2 月)增加了对 Linux 的 32 位 MIPS 支持,并为 Linux 的 64 位 PowerPC 和 z Systems 添加了官方二进制下载。
- Go 1.9(2017 年 8 月)为 Linux 的 64 位 ARM 添加了官方二进制下载。
- Go 1.12(2018 年 2 月)增加了对 Windows 10 IoT Core 的 32 位 ARM 支持,例如 Raspberry Pi 3。它还增加了对 AIX 的 64 位 PowerPC 支持。
- Go 1.14(2019 年 2 月)增加了对 Linux 的 64 位 RISC-V 支持。
尽管 Go 早期的注意力主要集中在 x86-64 移植上,但如今我们所有的目标架构都得到了我们[基于 SSA 的编译器后端](https://www.youtube.com/watch?v=uTMvKVma5ms)的良好支持,并能生成出色的代码。一路上,我们得到了许多贡献者的帮助,包括来自 Amazon、ARM、Atos、IBM、Intel 和 MIPS 的工程师。
Go 支持开箱即用地为所有这些系统进行交叉编译,只需极少的努力。例如,从 64 位 Linux 系统构建一个面向 32 位 x86 的 Windows 应用。
GOARCH=386 GOOS=windows go build myapp # writes myapp.exe
在过去一年中,几家主要供应商宣布了面向服务器、笔记本电脑和开发机的新款 ARM64 硬件。Go 对此已做好了充分准备。多年来,Go 一直为 Docker、Kubernetes 以及 ARM64 Linux 服务器上的其他 Go 生态系统提供支持,同时也在 ARM64 Android 和 iOS 设备上支持移动应用。
自从苹果公司今年夏天宣布 Mac 将过渡到 Apple Silicon 以来,苹果和 Google 一直在合作,以确保 Go 和更广泛的 Go 生态系统在这类设备上运行良好,包括通过 Rosetta 2 运行 Go x86 二进制文件,以及运行原生的 Go ARM64 二进制文件。本周早些时候,我们发布了第一个 Go 1.16 beta 版本,其中包含对使用 M1 芯片的 Mac 的原生支持。您可以在 [Go 下载页面](https://go-lang.org.cn/dl/#go1.16beta1) 下载并试用 Go 1.16 beta 版,适用于 M1 Mac 以及您所有的其他系统。(当然,这是一个 beta 版本,和所有 beta 版本一样,肯定存在我们尚未发现的 bug。如果您遇到任何问题,请在 [golang.org/issue/new](https://go-lang.org.cn/issue/new) 报告。)
在本地开发中使用与生产环境相同的 CPU 架构总是很方便的,这样可以减少两个环境之间的差异。如果您部署到 ARM64 生产服务器,Go 也可以轻松地在 ARM64 Linux 和 Mac 系统上进行开发。当然,像往常一样,在一台系统上工作并为另一台系统进行交叉编译部署仍然一样简单,无论您是在 x86 系统上工作并部署到 ARM,在 Windows 上工作并部署到 Linux,还是其他任何组合。
我们接下来希望添加支持的目标是 ARM64 Windows 10 系统。如果您有相关专业知识并希望提供帮助,我们正在 [golang.org/issue/36439](https://go-lang.org.cn/issue/36439) 协调相关工作。
下一篇文章:为 Go 添加泛型的提案
上一篇文章:将 godoc.org 请求重定向到 pkg.go.dev
博客索引