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://go-lang.org.cn/doc/go1.15#darwin。
Go 1.17 及更高版本仅支持 macOS High Sierra 10.13 或更新版本;请参阅 https://go-lang.org.cn/doc/go1.17#darwin。
Go 1.21 及更高版本仅支持 macOS Catalina 10.15 或更新版本;请参阅 https://go-lang.org.cn/doc/go1.20#darwin。
Go 1.23 及更高版本仅支持 macOS Big Sur 11 或更新版本;请参阅 https://go-lang.org.cn/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_issues 和 https://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://go-lang.org.cn/doc/install/source#environment
- GO386=sse2 (默认): 任何至少支持 SSE2 的处理器
- GO386=softfloat: 所有 Pentium MMX 或更高版本的处理器 (使用软件浮点仿真)
arm
参见 https://go-lang.org.cn/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 的一部分。