Go Wiki: 最低要求

作業系統

Linux

對於 Go 1.23:核心版本 2.6.32 或更高版本。[但這取決於架構,我們需要為此提供特定的構建器。] Linux/ARMv5 需要更新得多的核心,至少 v3.1 (對於 __kuser_cmpxchg64)。

對於 Go 1.24 及更高版本:核心 3.2 或更高版本。

我們不支援 CentOS 5。核心太舊 (2.6.18)。

對於小端 MIPS64,已知核心版本 4.1 無法工作,而 4.8 可以工作

對於 loong64,核心 5.19 及更高版本執行良好。

如果您正在為嵌入式系統使用 tinyconfig(例如 make tinyconfig),您幾乎肯定也會在核心中啟用 printk 和控制檯;我們不會在此處包含這些通用選項。對於 Go,您還必須啟用 CONFIG_FUTEX 和 CONFIG_EPOLL。

在 arm64 上,過時的 (低於 2.33 版本) ld.gold 可能會導致共享庫測試失敗(參見 https://github.com/golang/go/issues/28334)

Windows

對於 Go 1.10:Windows XP (帶 Service Pack 3) 或更高版本。

對於 Go 1.11 及更高版本:Windows 7 及更高版本或 Windows Server 2008 R2 及更高版本。我們在 Windows Server 2008 R2、2012 R2 和 2016 上進行測試,它們大致對應 Windows 7、Windows 8.1 和 Windows 10。

對於 Go 1.21 及更高版本:Windows 10 及更高版本或 Windows Server 2016 及更高版本。

macOS (原 OS X,又名 Darwin)

macOS Sierra 10.12 或更高版本需要 Go 1.7.1 或更高版本。

macOS Monterey 12 或更高版本需要 Go 1.11 或更高版本。

Go 1.15 及更高版本僅支援 macOS Sierra 10.12 或更新版本;請參閱 https://golang.org.tw/doc/go1.15#darwin

Go 1.17 及更高版本僅支援 macOS High Sierra 10.13 或更新版本;請參閱 https://golang.org.tw/doc/go1.17#darwin

Go 1.21 及更高版本僅支援 macOS Catalina 10.15 或更新版本;請參閱 https://golang.org.tw/doc/go1.20#darwin

Go 1.23 及更高版本僅支援 macOS Big Sur 11 或更新版本;請參閱 https://golang.org.tw/doc/go1.23#darwin

截至 2023 年 5 月 31 日,我們擁有適用於 macOS 10.14 到 macOS 13 的構建器。

OpenBSD

目前僅支援官方穩定的版本。

DragonFly BSD

通常只支援最新發布版本。我們有一個構建器,但它不是我們埠中最穩定的。

FreeBSD

有關受支援的 FreeBSD/架構/Go 版本矩陣,請參閱 Go on FreeBSD

NetBSD

已知 NetBSD 7.1 及以前版本存在錯誤(包括核心崩潰)。據報道,NetBSD 7.1.1 中有一個修復,但截至 2017 年 7 月 10 日尚未驗證,因為我們尚未重新執行構建器。請參閱 https://tip.golang.org/doc/go1.9#known_issueshttps://github.com/golang/go/issues/20852

Solaris

基於 illumos (前身為 OpenSolaris 10) 的發行版或 Oracle Solaris 11+。

iOS

iOS 12 或更高版本。

架構

微架構支援

對於某些架構,Go 支援使用環境變數編譯到特定的微架構,例如 Go 1.18 及更高版本的 GOAMD64。二進位制檔案將在啟動時檢查是否支援請求的微架構級別。例如,使用 GOAMD64=v3 構建的二進位制檔案將在不支援 LZCNT 的 CPU 上失敗。

各種微架構級別以及用於選擇它們的環境變數在每個架構中都有描述。

構建快取理解微架構環境變數,如果您更改它們,則不需要任何清理。

雖然當請求更高的最低微架構時,效能預期會提高,但這並非在所有情況下都如此。請對您的效能關鍵程式碼進行基準測試以驗證效能改進。

amd64

直到 Go 1.17,Go 編譯器總是生成可以由任何 64 位 x86 處理器執行的 x86 二進位制檔案。

Go 1.18 為 AMD64 引入了 4 個架構級別。每個級別在編譯器可以包含在生成的二進位制檔案中的 x86 指令集上有所不同

  • GOAMD64=v1 (預設): 基線。僅生成所有 64 位 x86 處理器都可以執行的指令。
  • GOAMD64=v2: 所有 v1 指令,加上 CMPXCHG16B, LAHF, SAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3。
  • GOAMD64=v3: 所有 v2 指令,加上 AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, OSXSAVE。
  • GOAMD64=v4: 所有 v3 指令,加上 AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL。

例如,設定 GOAMD64=v3 將允許 Go 編譯器在生成的二進位制檔案中使用 AVX2 指令(這在某些情況下可能會提高效能);但這些二進位制檔案不會在不支援 AVX2 的舊 x86 處理器上執行。

Go 工具鏈也可能生成更新的指令,但透過動態檢查加以保護,以確保它們僅在有能力的處理器上執行。例如,在 GOAMD64=v1 的情況下,如果 CPUID 報告 math/bits.OnesCount 可用,它仍將使用 POPCNT 指令。否則,它會回退到通用實現。

Go 工具鏈目前不生成任何 AVX512 指令。

不支援在不提供 SSE3 的平臺上使用競態檢測器。

請注意,在此上下文中,處理器是一個簡化。實際上,需要整個系統(韌體、管理程式、核心)的支援。

有關如何使用 GOAMD64 等微架構環境變數的提示,請參閱 微架構支援 部分。

386

參見 https://golang.org.tw/doc/install/source#environment

  • GO386=sse2 (預設): 任何至少支援 SSE2 的處理器
  • GO386=softfloat: 所有 Pentium MMX 或更高版本的處理器 (使用軟體浮點模擬)

arm

參見 https://golang.org.tw/doc/install/source#environment

  • GOARM=5: 使用軟體浮點;當 CPU 沒有 VFP 協處理器時
  • GOARM=6: 僅使用 VFPv1;交叉編譯時的預設值;通常是 ARM11 或更好的核心 (也支援 VFPv2 或更好)
  • GOARM=7: 使用 VFPv3;通常是 Cortex-A 核心

arm64

直到 Go 1.23,Go 編譯器總是生成可以由任何 ARMv8-A 處理器執行的 ARM64 二進位制檔案。

Go 1.23 引入了一個新的 GOARM64 環境變數,它在編譯時指定 ARM64 架構的最低目標版本。允許的值是 v8.{0-9}v9.{0-5}。這後面可以跟一個指定目標硬體實現的擴充套件的選項。有效選項是 ,lse,crypto

例如,設定 GOARM64=v8.0,lse 將允許 Go 編譯器在生成的二進位制檔案中使用 LSE 指令(這在某些情況下可能會提高效能);但這些二進位制檔案將無法在不支援 LSE 的舊 ARM64 處理器上執行。

Go 工具鏈也可能生成更新的指令,但透過動態檢查加以保護,以確保它們僅在有能力的處理器上執行。

GOARM64 環境變數預設為 v8.0

ppc64 (大端)

POWER5 及以上。從 Go 1.9 開始,僅支援 POWER8 及以上。

ppc64le (小端)

POWER8 及以上。

mips64 (大端)

MIPS III 或更高版本。構建器正在使用 MIPS64r2。

mips64le (小端)

小端模式下的 MIPS III 或更高版本。

s390x

z13

mips (大端) 和 mipsle (小端)

MIPS32r1

riscv64

rv64g (rv64imafd)。從 Go 1.23 開始,需要 RVA20U64 強制擴充套件。

loong64

Go 1.19 或更高版本。Go 編譯器總是生成可以由 LA364、LA464、LA664 或更高版本核心的任何處理器執行的 Loong64 二進位制檔案。

  • LA364:支援非對齊記憶體訪問、128 位 SIMD,典型處理器包括龍芯-2K2000/2K3000 等。
  • LA464:支援非對齊記憶體訪問、128/256 位 SIMD,典型處理器包括龍芯-3A5000/3C5000/3D5000 等。
  • LA664:支援非對齊記憶體訪問、128/256 位 SIMD,典型處理器包括龍芯-3A6000/3C6000 等。

cgo

對於使用 cgo 的程式,需要 gcc 4.6 或更高版本。


此內容是 Go Wiki 的一部分。