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)。
对于 little-endian 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.ac.cn/doc/go1.15#darwin。
Go 1.17 及更高版本仅支持 macOS High Sierra 10.13 或更新版本;请参阅 https://golang.ac.cn/doc/go1.17#darwin。
Go 1.21 及更高版本仅支持 macOS Catalina 10.15 或更新版本;请参阅 https://golang.ac.cn/doc/go1.20#darwin。
Go 1.23 及更高版本仅支持 macOS Big Sur 11 或更新版本;请参阅 https://golang.ac.cn/doc/go1.23#darwin。
截至 2023 年 5 月 31 日,我们拥有针对 macOS 10.14 到 macOS 13 的构建器。
OpenBSD
仅支持当前官方认可的 -stable 版本。
DragonFly BSD
通常仅支持最新发布版本。我们有构建器,但它不是我们移植版本中最稳定的。
FreeBSD
请参阅 在 FreeBSD 上运行 Go 以获取支持的 FreeBSD/架构/Go 版本矩阵。
NetBSD
直到当前的 NetBSD 7.1,都存在已知的 NetBSD 错误(包括内核崩溃)。据报道 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://golang.ac.cn/doc/install/source#environment
- GO386=sse2(默认):至少具备 SSE2 的任何处理器
- GO386=softfloat:所有 Pentium MMX 或更高版本的处理器(使用软件浮点仿真)
arm
请参阅 https://golang.ac.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)
loong64
Go 1.19 或更高版本。Go 编译器始终生成可由 LA364、LA464、LA664 或更高版本核心的任何处理器执行的 Loong64 二进制文件。
- LA364:支持非对齐内存访问、128 位 SIMD,典型处理器包括 loongson-2K2000/2K3000 等。
- LA464:支持非对齐内存访问、128/256 位 SIMD,典型处理器包括 loongson-3A5000/3C5000/3D5000 等。
- LA664:支持非对齐内存访问、128/256 位 SIMD,典型处理器包括 loongson-3A6000/3C6000 等。
cgo
使用 cgo 的程序需要 gcc 4.6 或更高版本。
此内容是 Go Wiki 的一部分。