Go Wiki:最低要求
操作系统
Linux
内核版本 2.6.32 或更高版本。[这取决于架构,我们需要为此提供特定的构建器。] Linux/ARMv5 需要更新的内核,至少为 v3.1(用于 __kuser_cmpxchg64
)。
我们不支持 CentOS 5。内核太旧了(2.6.18)。
对于小端 MIPS64,内核版本 4.1 已知会失败,而 4.8 可以运行.
如果您正在为嵌入式系统使用 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(née 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.
截至 2023-05-31,我们为 macOS 10.14 至 macOS 13 提供构建器。
OpenBSD
仅当前正式支持的 -stable 版本。
DragonFly BSD
通常只支持最新的发布版本。我们有一个构建器,但它不是我们端口中最稳定的构建器。
FreeBSD
参见 Go on FreeBSD 以了解支持的 FreeBSD/体系结构/Go 版本矩阵。
NetBSD
已知 NetBSD 中存在错误(包括内核崩溃),直到当前的 NetBSD 7.1。据报道 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 引入了 4 个 AMD64 的体系结构级别。每个级别在编译器可以在生成的二进制文件中包含的 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://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)
cgo
对于使用 cgo 的程序,需要 gcc 4.6 或更高版本。
此内容是 Go Wiki 的一部分。