Go on ARM 和未來,Apple M1 支援來了

astaxie發表於2020-12-18

最近業界對非 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.3(2014 年 6 月)新增了對 64 位 x86 上 Solaris 的支援。
  • 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.9(2017 年 8 月)增加了 64 位 ARM 上 Linux 的官方二進位制下載。
  • Go 1.12(2018 年 2 月)新增了對 32 位 ARM 上的 Windows 10 IoT 核心的支援,例如 Raspberry Pi3。它還新增了對 64 位 PowerPC 上的 AIX 的支援。
  • Go 1.14(2019 年 2 月)新增了對 64 位 RISC-V 上 Linux 的支援。

儘管在 Go 的早期,x86-64 埠得到了大多數關注,但是今天,我們所有基於 SSA 的編譯器後端都很好地支援了所有目標架構並生成出高質量的程式碼。許多貢獻者一直為我們提供幫助,包括來自 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 一直在為 ARM64 Linux 伺服器上的 Docker,Kubernetes 和其餘 Go 生態系統以及 ARM64 Android 和 iOS 裝置上的移動應用程式提供支援。

自從今年夏天蘋果宣佈 Mac 過渡到蘋果晶片以來,蘋果和谷歌一直在努力確保 Go 和更廣泛的 Go 生態系統在它們上執行良好,它們都在 Rosetta 2 下執行 Go x86 二進位制檔案,並執行本機 Go ARM64 二進位制檔案。本週初,我們釋出了第一個 Go 1.16 beta,其中包括對使用 M1 晶片的 Mac 的原生支援。您可以在 Go 下載頁面上下載並試用 M1 Mac 和所有其他系統的 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 上協調工作。

更多原創文章乾貨分享,請關注公眾號
  • Go on ARM 和未來,Apple M1 支援來了
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章