Go 1.24 リリース

Go 1.24 is released! by Junyang Shao, on behalf of the Go team

本日Goチームは、Go 1.24をリリースしました。ダウンロードページ から入手できます。

Go 1.24ではGo 1.23と比べて多くの改良が加えられています。以下ではその主なハイライトを紹介します。 変更点の完全な一覧については リリースノート を参照してください。

言語の変更

Go 1.24では ジェネリック型エイリアス が完全にサポートされました。 型エイリアスは、定義済みの型と同じようにパラメータ化できます。詳細は 言語仕様 を参照してください。

パフォーマンスの向上

ランタイムの複数のパフォーマンス改善により、代表的なベンチマーク群全体でのCPUオーバーヘッドが 平均2〜3%減少しました。この改善には、Swiss Tables をベースにした新しい組み込み map の実装、小さいオブジェクトに対するより効率的なメモリアロケーション、 そして新しいランタイム内部のミューテックスの実装が含まれます。

ツールの改善

  • go コマンドは、モジュールのツール依存関係を追跡する仕組みを新たに提供するようになりました。 現在のモジュールに tool ディレクティブを追加するには go get -tool を使います。 tool ディレクティブで宣言したツールを実行するには go tool [tool name] を使います。 詳しくはリリースノートの go コマンド の項を参照してください。
  • go vet サブコマンドに追加された新しい test アナライザーは、テストパッケージ内のテスト、 ファザー、ベンチマーク、Exampleの宣言によくある間違いを報告します。詳しくはリリースノートの vet の項を参照してください。

標準ライブラリの追加

  • 標準ライブラリには、FIPS 140-3準拠を後押しする新しい仕組み が追加されました。承認されたアルゴリズムに対してこの新しい仕組みを使う際、アプリケーション側の ソースコードを変更する必要はありません。詳しくはリリースノートの FIPS 140-3準拠 の項を参照してください。FIPS 140とは別に、 これまで x/crypto モジュールにあったいくつかのパッケージが 標準ライブラリ でも使えるようになりました。

  • ベンチマークでは、b.N を使った典型的なループ構造である for range b.N の代わりに、 より高速でエラーの起きにくい testing.B.Loop メソッドを使って for b.Loop() { ... } のようにベンチマークの繰り返し処理を行えるようになりました。詳しくはリリースノートの 新しいベンチマーク関数 の項を参照してください。

  • 新しい os.Root 型により、特定のディレクトリ配下に限定した ファイルシステム操作ができるようになりました。詳しくはリリースノートの ディレクトリに限定したファイルシステムアクセス の項を参照してください。

  • ランタイムには新しいファイナライズの仕組みである runtime.AddCleanup が追加されました。これは runtime.SetFinalizer よりも柔軟で、 効率的で、エラーの起きにくいものです。詳しくはリリースノートの クリーンアップ の項を参照してください。

WebAssemblyサポートの改善

Go 1.24では、GoのプログラムがWebAssemblyのホストに関数をエクスポートするための新しい go:wasmexport ディレクティブが追加され、GoプログラムをWASIの reactor/library としてビルドできるようになりました。詳しくはリリースノートの WebAssembly の項を参照してください。


完全かつ詳細な情報については Go 1.24リリースノート をお読みください。 ここで触れたトピックのいくつかをより詳しく取り上げるフォローアップのブログ記事も予定していますので、 お楽しみに。

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

Go 1.24を楽しんでお使いください!

By Junyang Shao, on behalf of the Go team