Go toolchain not available
エラーの完全解決ガイド
問題:go
コマンドが全て使用不可能になるツールチェーンエラー
Goのバージョン(1.21→1.22など)をアップデートする際、以下のエラーが発生し全てのgo
コマンド(go test
, go mod tidy
など)が使用不可能になる問題が発生します:
bash
go: go.mod requires go >= 1.22 (running go 1.21.10; GOTOOLCHAIN=local)
# ツールチェーン設定後
go: downloading go1.22 (darwin/amd64)
go: download go1.22 for darwin/amd64: toolchain not available
根本原因:古いセットアップとgo.mod
のバージョン表記問題
以下の複合的な要因で発生します:
go.mod
ファイルのGoバージョン表記が不完全- 環境変数
GOTOOLCHAIN
の設定が適切でない - 過去のGoインストール残留ファイルの影響
- Docker環境で古いベースイメージが使用されている
解決策1: go.mod
のバージョン表記修正(最優先対応)
根本解決として最も効果的な方法:
- プロジェクトの
go.mod
ファイルを開く - バージョン指定をマイナーバージョンまで完全表記に変更
diff
- go 1.22
+ go 1.22.0 // マイナーバージョン(.0)を明記
- 設定をリセット
bash
go env -u GOTOOLCHAIN # 環境変数を未設定に戻す
- 動作確認
bash
go version
# 正常出力例: go 1.22.0
重要ポイント
go 1.22
→ 1.22.0
に変更するだけで動作するケースが80%以上
ツールチェーン管理が「go.work
よりもgo.mod
を優先」する仕様のため
解決策2: 環境変数とキャッシュの完全リセット
go.mod
修正でも改善しない場合の追加対応:
ステップ1: Go環境の完全アンインストール
macOS (Homebrew):
bash
brew uninstall go --force
rm -rf $(brew --cache)/go*
Windows:
- コントロールパネルからGoをアンインストール
- 以下を手動削除:
C:\Go %USERPROFILE%\go %APPDATA%\go
Linux:
bash
sudo apt purge golang-go -y
sudo rm -rf /usr/local/go
ステップ2: 残留ファイルの削除
bash
# 全ユーザーデータ削除
rm -rf ~/.config/go
rm -rf ~/.cache/go-build
# モジュールキャッシュ削除
rm -rf ~/go/pkg/mod
ステップ3: クリーンインストール
- 公式サイトから最新版ダウンロード
- インストーラー実行後バージョン確認:bash
go version # go1.22.x を確認
解決策3: Docker環境特有の対応
Dockerビルド時に発生するケースの対応:
現象
bash
# ベースイメージが古い場合のエラー
go: go.mod requires go >= 1.23.2 (running go 1.23.1)
解決手順
最新のDockerイメージを取得:
bashdocker pull golang:1-alpine
Dockerfileで明示的バージョン指定:
dockerfileFROM golang:1.22-alpine # 具体的バージョンを指定
マルチステージビルドで整合性確保:
dockerfile# ビルドステージ FROM golang:1.22 AS builder WORKDIR /app COPY . . RUN go build -o app # 実行ステージ FROM alpine:latest COPY --from=builder /app/app . CMD ["./app"]
予防策とベストプラクティス
1. go.mod
バージョン表記ルール
- 常にマイナーバージョンまで明記
go 1.22.0
(〇) vsgo 1.22
(✕)
2. 環境変数管理の適正化
bash
# プロジェクト固有設定(推奨)
echo "GOTOOLCHAIN=go1.22+auto" >> .go.env
# グローバル設定(非推奨)
go env -w GOTOOLCHAIN=go1.22+auto
警告
go work edit -toolchain=none
は最新バージョンで非推奨
代わりにgo env -u GOTOOLCHAIN
を使用
3. バージョン管理ツールの活用
bash
# goenv使用例
goenv install 1.22.0
goenv local 1.22.0 # プロジェクト固有バージョン
サポート状況(2025年2月現在)
Goバージョン | ツールチェーン互換性 |
---|---|
1.22系 | 完全対応 |
1.21系 | 要パッチ適用 |
1.20以下 | 非対応 |
根本原因の技術的解説
エラー発生のメカニズム:
go.mod
のgo 1.22
が「1.22.x」と解釈される- ローカルに
1.22.0
があっても1.22.1
を要求する可能性 - Goのツールチェーンダウンローダーが不一致を検出
GOTOOLCHAIN=local
設定がダウンロードをブロック
まとめ: 再発防止フロー
- 🔄
go.mod
で必ずフルバージョン指定(1.22 → 1.22.0) - 🧹 環境変数
GOTOOLCHAIN
を設定後は必ずリセット - 🐳 Dockerは明示的バージョン指定(
golang:1.22-alpine
) - 🔧 バージョン管理ツールで環境を固定
これらの対策でgo
コマンドが完全復旧し、スムーズなバージョンアップが可能になります。