继续使用ARM和超越

2020-12-19 08:10:14

业界最近对非x86处理器充满了热议,因此我们认为值得一提有关Go对它们的支持的简短文章。

Go的可移植性一直很重要,而不是要适合任何特定的操作系统或体系结构。Go的初始开源版本包括对两个操作系统(Linux和Mac OS X)和三个体系结构(64位x86, 32位x86和32位ARM)。

多年来,我们增加了对更多操作系统和体系结构组合的支持:

Go 1(2012年3月)支持原始系统以及64位和32位x86上的FreeBSD,NetBSD和OpenBSD,以及32位x86上的Plan 9。

Go 1.4(2014年12月)添加了对32位ARM上的Android和对64位x86上的Plan 9的支持。

Go 1.5(2015年8月)增加了对在64位ARM和64位PowerPC上的Linux以及在32位和64位ARM上的iOS的支持。

Go 1.6(2016年2月)添加了对64位MIPS上的Linux和32位x86上的Android的支持,还添加了对32位ARM上的Linux的官方二进制下载,主要是针对Raspberry Pi系统。

Go 1.7(2016年8月)增加了对z Systems(S390x)上的Linux和32位ARM上的Plan 9的支持。

Go 1.8(2017年2月)添加了对32位MIPS上的Linux的支持,并添加了64位PowerPC和z Systems上Linux的官方二进制下载。

Go 1.12(2018年2月)添加了对32位ARM上的Windows 10 IoT核心版的支持,例如Raspberry Pi 3.它还添加了对64位PowerPC上的AIX的支持。

尽管在Go成立之初,x86-64端口受到了最多的关注,但如今,我们所有基于SSA的编译器后端都很好地支持了所有目标体系结构,并产生了出色的代码。许多贡献者一直在帮助我们,包括来自Amazon,ARM,Atos,IBM,Intel和MIPS的工程师。

Go支持开箱即用的所有这些系统的交叉编译功能,例如,从64位Linux系统为基于32位x86的Windows构建应用程序:

在过去的一年中,几家主要供应商宣布了用于服务器,笔记本电脑和开发人员机器的新型ARM64硬件。多年来,Go一直在ARM64 Linux服务器以及ARM64 Android和iOS设备上的移动应用程序上为Docker,Kubernetes和其余Go生态系统提供支持。

自从今年夏天苹果宣布Mac过渡到苹果芯片以来,苹果和谷歌一直在努力确保Go和更广泛的Go生态系统在它们上运行良好,既可以在Rosetta 2下运行Go x86二进制文件,也可以运行本地的Go ARM64二进制文件。一周之内,我们发布了第一个Go 1.16 beta版,其中包括对使用M1芯片的Mac的本地支持。您可以在Go下载页面上下载并试用M1 Macs和所有其他系统的Go 1.16 beta。 Beta版本,并且像所有Beta版本一样,肯定存在我们不知道的错误。如果遇到任何问题,请在golang.org/issue/new中报告。

使用与生产中相同的CPU架构进行本地开发总是很不错的,这样可以消除两种环境之间的差异。如果将其部署到ARM64生产服务器,Go也将使在ARM64 Linux和Mac系统上的开发也变得很容易。 ,无论您是在x86系统上工作并部署到ARM,在Windows上工作并部署到Linux还是其他组合,在一个系统上工作并交叉编译以部署到另一个系统仍然像以前一样容易。 我们要增加支持的下一个目标是ARM64 Windows 10系统。如果您有专业知识并想提供帮助,我们将在golang.org/issue/36439上进行协调。