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.dokyumento.jp/doc/go1.15#darwin を参照してください。
Go 1.17 以降は macOS High Sierra 10.13 以降のみをサポートします。https://go.dokyumento.jp/doc/go1.17#darwin を参照してください。
Go 1.21 以降は macOS Catalina 10.15 以降のみをサポートします。https://go.dokyumento.jp/doc/go1.20#darwin を参照してください。
Go 1.23 以降は macOS Big Sur 11 以降のみをサポートします。https://go.dokyumento.jp/doc/go1.23#darwin を参照してください。
2023年5月31日現在、macOS 10.14 から macOS 13 までのビルダーがあります。
OpenBSD
現在公式にサポートされている -stable バージョンのみ。
DragonFly BSD
一般的に最新のリリースバージョンのみ。ビルダーはありますが、ポートの中で最も安定しているわけではありません。
FreeBSD
サポートされている FreeBSD/アーキテクチャ/Go バージョンのマトリックスについては、Go on FreeBSD を参照してください。
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 は環境変数を使用して特定のマイクロアーキテクチャへのコンパイルをサポートしています。例えば、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 は、CPUID が利用可能と報告した場合、依然として POPCNT 命令を使用します。そうでない場合は、汎用的な実装にフォールバックします。
Go ツールチェーンは現在、AVX512 命令を生成していません。
レース検出器は SSE3 を提供しないプラットフォームではサポートされていません。
この文脈における「プロセッサ」は単純化された表現であることに注意してください。実際には、システム全体 (ファームウェア、ハイパーバイザー、カーネル) からのサポートが必要です。
GOAMD64 のようなマイクロアーキテクチャ環境変数の使用方法については、マイクロアーキテクチャのサポート セクションを参照してください。
386
https://go.dokyumento.jp/doc/install/source#environment を参照してください。
- GO386=sse2 (デフォルト): 少なくとも SSE2 を搭載したすべてのプロセッサ
- GO386=softfloat: すべての Pentium MMX 以降のプロセッサ (ソフトウェア浮動小数点エミュレーションを使用)
arm
https://go.dokyumento.jp/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をサポート。代表的なプロセッサには 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の一部です。