Go 1.21 がリリースされました!

Go 1.21 is released! by Eli Bendersky, on behalf of the Go team

本日、Goチームは Go 1.21 をリリースできることを大変嬉しく思います。ダウンロードページ から入手できます。

Go 1.21 には新機能や改善が満載です。ここでは注目すべき変更点をいくつか紹介します。 全リストについては リリースノート を参照してください。

ツールの改善

  • Go 1.20 でプレビューとして発表したプロファイル誘導最適化 (Profile Guided Optimization、PGO) 機能が、正式に一般提供されました。メインパッケージの ディレクトリに default.pgo という名前のファイルがあると、go コマンドはそれを使ってPGOビルドを 有効にします。詳細は PGOのドキュメント を参照してください。幅広い Goプログラムに対してPGOの効果を計測したところ、2〜7%のパフォーマンス向上が見られました。
  • go ツールは、後方および 前方の言語互換性をサポートするようになりました。

言語の変更

  • 新しい組み込み関数として min、maxclear が追加されました。
  • ジェネリック関数の型推論にいくつかの改善が加えられました。 言語仕様における型推論の説明も拡充され、明確になっています。
  • 将来のGoのバージョンでは、Goプログラミングで最もよくあるつまずきの一つである ループ変数のキャプチャに対処する予定です。Go 1.21には、 この機能のプレビューが含まれており、環境変数を使ってコード内で有効にできます。詳細は LoopvarExperiment のwikiページ を参照してください。

標準ライブラリへの追加

  • 構造化ロギングのための新しい log/slog パッケージ。
  • 任意の要素型のスライスに対する一般的な操作のための新しい slices パッケージ。これには、sort パッケージよりも概して高速で扱いやすい ソート関数が含まれています。
  • 任意のキー型や要素型のマップに対する一般的な操作のための新しい maps パッケージ。
  • 順序付け可能な値を比較するための新しいユーティリティを備えた新しい cmp パッケージ。

パフォーマンスの改善

PGOを有効にした場合のパフォーマンス向上に加えて、次のような改善もあります。

  • Goコンパイラ自体もPGOを有効にして1.21向けに再ビルドされており、その結果、ホストアーキテクチャに 応じて2〜4%速くGoプログラムをビルドできるようになりました。
  • ガベージコレクタのチューニングにより、アプリケーションによってはテールレイテンシが最大40% 削減される場合があります。
  • runtime/trace によるトレースの収集は、amd64とarm64において 大幅にCPUコストが小さくなりました。

WASIへの新しい移植

Go 1.21では、WebAssembly System Interface (WASI) Preview 1 (GOOS=wasip1GOARCH=wasm) 向けの実験的な移植が追加されました。

より汎用的なWebAssembly (Wasm) コードを書きやすくするため、コンパイラはWasmホストから関数を インポートするための新しいディレクティブ go:wasmimport にも対応しています。


コードを書き、バグを報告し、フィードバックを共有し、リリース候補をテストすることでこのリリースに 貢献してくださったすべての方に感謝します。皆さんの努力のおかげで、Go 1.21はできる限り安定した ものになりました。いつも通り、何か問題に気づいた場合はIssueを作成してください

Go 1.21をお楽しみください!

By Eli Bendersky, on behalf of the Go team