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