Go Wiki:最低需求
作業系統
Linux
Kernel 版本 2.6.32 或更新版本。[但這取決於架構,我們需要有針對此的特定建置器。]Linux/ARMv5 需要很多新版的 kernel,至少為 v3.1(針對 __kuser_cmpxchg64
)。
我們不支援 CentOS 5。kernel 太舊(2.6.18)。
對於 little-endian MIPS64,已知 kernel 版本 4.1 會失敗,4.8 會成功。
如果您正在為嵌入式系統使用 tinyconfig(例如 make tinyconfig),也幾乎肯定會在 kernel 中啟用 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://go.dev.org.tw/doc/go1.15#darwin。
Go 1.17 及更新版本僅支援 macOS High Sierra 10.13 或更新版本;請參閱 https://go.dev.org.tw/doc/go1.17#darwin。
Go 1.21 及更新版本將支援 macOS Catalina 10.15 或更新版本;請參閱 https://go.dev.org.tw/doc/go1.20#darwin。
截至 2023-05-31,我們有適用於 macOS 10.14 至 macOS 13 的建置器。
OpenBSD
只有目前正式支援的 -stable 版本。
DragonFly BSD
通常僅支援最新發布版本。我們有一個建置器,但它並非我們最穩定的 port。
FreeBSD
請參閱 Go on FreeBSD 以了解支援的 FreeBSD/架構/Go 版本矩陣。
NetBSD
已知 NetBSD 7.1 中存在 NetBSD 錯誤(包括核心崩潰)。NetBSD 7.1.1 中有報告的修正,但截至 2017-07-10 尚未驗證,因為我們尚未再次執行建置器。請參閱 https://tip.golang.org/doc/go1.9#known_issues 和 https://github.com/golang/go/issues/20852。
Solaris
基於 illumos(以前的 OpenSolaris 10)的發行版或 Oracle Solaris 11+。
iOS
iOS 12 或更新版本。
架構
微架構支援
對於某些架構,Go 支援使用環境變數編譯成特定微架構,例如 go1.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 時,math/bits.OnesCount 還是會使用 POPCNT 指令,只要 CPUID 回報說該指令可用。否則,它會改用通用實作。
目前 Go 工具鏈不會產生任何 AVX512 指令。
競爭偵測器不支援沒有提供 SSE3 的平台。
請注意,在此脈絡下,處理器 是一個簡化說法。實際上,需要整個系統(韌體、虛擬機器管理程式、核心)的支援。
請參閱 微架構支援 章節,了解如何使用 GOAMD64 等微架構環境變數的提示。
386
請參閱 https://go.dev.org.tw/doc/install/source#environment
- GO386=sse2(預設):任何至少有 SSE2 的處理器。
- GO386=softfloat:所有 Pentium MMX 或更新的處理器(使用軟體浮點運算模擬)。
arm
請參閱 https://go.dev.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)
cgo
對於使用 cgo 的程式,需要 gcc 4.6 或更新的版本。
此內容是 Go Wiki 的一部分。