概要
- Go 1.25は2025年8月リリース予定、主にツールチェーン・ランタイム・ライブラリの改善
- 従来通りGo 1互換性ポリシーを維持、既存プログラムは問題なく動作
- 言語仕様の大きな変更はなし、core typesの記述方法を変更
- goコマンドやランタイムに多くの新機能・最適化を追加
- 標準ライブラリやコンパイラの機能強化とバグ修正を実施
Go 1.25の新機能と主な変更点
- リリース時期 :2025年8月、Go 1.24から6ヶ月後のリリース
- 主な変更対象 :ツールチェーン、ランタイム、ライブラリ
- 互換性 :Go 1互換性保証の維持、既存プログラムの動作保証
言語仕様
- Go 1.25で 言語自体の仕様変更なし
- core types の記述が専用プローズに変更
- 詳細は公式ブログ記事参照
ツールチェーン・goコマンド
- go build -asan :プログラム終了時のリーク検出をデフォルト化
- Cで確保されGo/Cの他メモリから参照されない場合エラー報告
- 環境変数ASAN_OPTIONS=detect_leaks=0で無効化可能
- プリビルドツール減少 :コンパイラやリンカ以外は必要時にgo toolでビルド・実行
- go.mod ignoreディレクティブ :指定ディレクトリ・サブディレクトリをgoコマンドがパッケージ探索時に無視
- go doc -http :ドキュメントサーバ起動とブラウザ表示
- go version -m -json :Goバイナリ内のBuildInfo構造体をJSON形式で出力
- モジュールルートのサブディレクトリ指定 :go-importメタタグでサブディレクトリをモジュールルートとして解決可能
- workパッケージパターン :ワークスペース内全パッケージへのマッチング
- goコマンドによるgo.mod/go.work更新時のtoolchain行追加廃止
- go vet :waitgroup(sync.WaitGroup.Addの誤用検出)、hostport(IPv6非対応アドレスの検出)など新アナライザー追加
ランタイム
- GOMAXPROCSのコンテナ対応 :
- LinuxでcgroupのCPU帯域制限を考慮し、制限がある場合はそちらを優先
- 全OSで論理CPU数やcgroup制限の変化に応じてGOMAXPROCSを動的更新
- GOMAXPROCS環境変数やruntime.GOMAXPROCS呼び出しで自動制御無効化可能
- GODEBUGでcontainermaxprocs=0, updatemaxprocs=0で明示的無効化
- 新実験的ガーベジコレクタ :
- 小オブジェクトのマーキング・スキャン性能向上
- 実アプリでGCオーバーヘッド10~40%削減見込み
- GOEXPERIMENT=greenteagcで有効化
- Trace Flight Recorder :
- runtime/trace.FlightRecorder APIでリングバッファに軽量トレース記録
- 重要イベント発生時のみスナップショット取得可能
- FlightRecorderConfigで記録時間・容量調整
- 未処理panic出力の変更 :
- recovered後再panic時の出力を簡素化
- LinuxのVMA名付与 :
- 匿名メモリ領域に用途ラベル付与(例:[anon: Go: heap])
- GODEBUG=decoratemappings=0で無効化
コンパイラ・リンカ
- nilポインタバグ修正 :
- Go 1.21~1.24でnilチェック遅延バグを修正
- エラー処理前のnil利用で正しくpanic発生
- DWARF5対応 :
- デバッグ情報をDWARF v5で生成、容量・リンク時間削減
- GOEXPERIMENT=nodwarf5で旧バージョン利用可能(将来的に廃止予定)
- スライス高速化 :
- スライスのバックストアをより多くスタック上に割り当て性能向上
- unsafe.Pointer誤用の影響増大、bisectツールで問題特定可能
- すべての新しいスタック割当を-gcflags=all=-d=variablemakehash=nで無効化可能
- リンカの-funcalign=N :関数エントリのアラインメント指定可能
標準ライブラリ
- testing/synctestパッケージ :
- 並行コードのテスト支援
- テスト関数を仮想時間・バブル内で実行
- GOEXPERIMENT=synctest時の旧APIはGo 1.26で廃止予定
- 実験的encoding/json/v2パッケージ :
- 新しいJSON実装(GOEXPERIMENT=jsonv2で有効化)
- encoding/jsonとjsontextの新パッケージ追加
- マーシャリング・アンマーシャリングは互換、エラーメッセージは変更あり
- 処理速度大幅向上、特にデコード
- ユーザーに新APIの試用とフィードバックを推奨
その他ライブラリの細かな変更
- archive/tar :Writer.AddFSでシンボリックリンク対応
- encoding/asn1 :T61String/BMPStringのパース一貫性向上、不正エンコーディングの拒否
- crypto :MessageSignerインターフェース追加、SignMessage関数導入、fips140設定の動的変更禁止、AVX2非対応時のSHAアルゴリズムの低速化
- crypto/ecdsa :低レベルエンコーディング用関数追加、FIPS 140-3モードで署名速度向上
- crypto/ed25519 :FIPS 140-3モードで署名速度向上
まとめ
- Go 1.25は 大規模な新機能追加や最適化 を含みつつ、 後方互換性を重視
- コンテナ環境・並行処理・デバッグ・JSON処理 の分野で大幅な進化
- 実験的機能の活用とフィードバックが今後の進化を左右