GoSuda

Go 1.24の新機能

By Lemon Mint
views ...

Go 1.24は、パフォーマンス、セキュリティ、開発者エクスペリエンスに焦点を当てた幅広い機能強化を導入し、重要なリリースとなりつつあります。これらの変更は、Goを現代のアプリケーション構築においてさらに強力かつ効率的にすることを目指しています。

パフォーマンス向上

代表的なベンチマークスイート全体でCPUオーバーヘッドが2〜3%削減されるなど、全体的なパフォーマンスが向上しました。これらの改善には、新しい組み込みmapの実装、小規模オブジェクトのより効率的なメモリ割り当て、および新しいランタイム内部mutexの実装が含まれます。結果はアプリケーションによって異なる場合があります。

ポスト量子暗号

crypto/mlkemパッケージの導入により、ML-KEM-768およびML-KEM-1024が実装されました。ML-KEMは、以前はKyberとして知られ、FIPS 203で規定されているポスト量子鍵交換メカニズムです。この追加により、Goは暗号セキュリティの未来に備えます。

TLSの強化

TLSにおけるEncrypted Client Hello (ECH) のサポート。この機能は、Config.EncryptedClientHelloKeysフィールドに値を設定することで有効にでき、TLS接続のプライバシーとセキュリティを向上させます。

新しいSwiss Table Map

パフォーマンスを向上させるための強化されたmap実装。この新しい実装はSwiss Tablesに基づいており、GOEXPERIMENT=noswissmapビルドフラグを使用して無効にすることができます。

Sync Mapの更新

sync.Mapにおけるmap変更のパフォーマンスが向上しました。独立したキーセットの変更は、大規模なmapにおいて競合する可能性が大幅に低くなり、mapからの低競合ロードを実現するために必要なウォームアップ時間はなくなりました。問題が発生した場合は、GOEXPERIMENT=nosynchashtriemapを使用して古い実装に戻すことができます。

JSONマーシャリングの強化

JSONマーシャリング中のよりスマートなstructフィールド省略のための新しいomitemptyタグオプション。マーシャリング時に、omitemptyオプションを持つstructフィールドは、その値がゼロの場合に省略されます。フィールド型にIsZero() boolメソッドがある場合、そのメソッドが値がゼロであるかどうかの判断に使用されます。

ランタイムのクリーンアップ

より良いリソース管理のためにSetFinalizerを置き換えるAddCleanup関数の導入。SetFinalizerとは異なり、ファイナライズのためにアタッチされたオブジェクトを復活させることはなく、複数のクリーンアップを単一のオブジェクトにアタッチすることができます。新しいコードでは、SetFinalizerよりもAddCleanupを優先すべきです。

go.mod内のツールディレクティブ

go.mod内のツールディレクティブを使用することで、実行可能ファイルの依存関係追跡が改善されました。これにより、従来「tools.go」という慣例的なファイルにツールをブランクインポートとして追加するという回避策が不要になります。

ディレクトリ限定アクセス

制御されたファイルシステム操作のための新しいos.Root型。os.Root型は、特定のディレクトリ内でファイルシステム操作を実行する機能を提供し、指定されたパス外へのアクセスを防ぎます。

テストの改善

並行コードをテストするための新しいtesting/synctestパッケージ。synctest.Run関数は、分離された「バブル」内でゴルーチンのグループを開始し、synctest.Wait関数は、現在のバブル内のすべてのゴルーチンがブロックするのを待ちます。このパッケージは実験的であり、ビルド時にGOEXPERIMENT=synctestを設定することで有効にする必要があります。

ビルドキャッシュ

go runの実行可能ファイルがキャッシュされるようになり、実行が高速化されました。これにより、キャッシュが大きくなるという代償を払って、繰り返し実行が高速になります。

Cgoのパフォーマンス

Cgoのパフォーマンスを向上させるための新しい#cgo noescapeおよび#cgo nocallbackアノテーション。#cgo noescape cFunctionNameは、C関数に渡されるメモリがエスケープしないことをコンパイラに伝えます。#cgo nocallback cFunctionNameは、C関数がGo関数にコールバックしないことをコンパイラに伝えます。

ウィークポインタ

回収を妨げずに安全にメモリを参照するためのウィークポインタのサポート。ウィークポインタは、値の関連付けのためのウィークマップ、正規化マップ、さまざまな種類のキャッシュなど、メモリ効率の高い構造を作成するために提供される低レベルのプリミティブです。

ベンチマークの改善

より高速でエラーが発生しにくいベンチマークのための新しいtesting.B.Loopメソッド。ベンチマーク関数は-countごとに正確に1回実行されるため、コストのかかるセットアップとクリーンアップのステップは1回だけ実行されます。関数呼び出しのパラメータと結果は維持され、コンパイラがループ本体を完全に最適化して削除することを防ぎます。

Go 1.24は、言語とそのエコシステムの様々な側面において大幅な改善をもたらし、重要なリリースとなりつつあります。

Overview of Go 1.24