---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: Go 1.24 リリース概要：Swiss Table マップ、ML-KEM、os.Root、testing/synctest
description: Go 1.24の技術概要：Swiss Table built-in maps、crypto/mlkem（FIPS 203）、TLS Encrypted Client Hello、runtime.AddCleanup、os.Root、およびtesting/synctest。
language: ja
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

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

## パフォーマンスの向上

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

## ポスト量子暗号

`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マップ

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

## Sync Mapの更新

`sync.Map`におけるマップ変更のパフォーマンスが改善されました。互いに素なキーの集合に対する変更は、大規模なマップにおいて競合が発生する可能性が大幅に低減され、マップから低競合での読み取りを実現するために必要だったウォームアップ時間も不要になりました。問題が発生した場合は、`GOEXPERIMENT=nosynchashtriemap`を使用して旧実装に戻すことができます。

## JSONマーシャリングの強化

構造体フィールドをJSONマーシャリング時により賢く省略するための新しい`omitempty`タグオプションです。マーシャリング時に、`omitempty`オプションを持つ構造体フィールドは、その値がゼロ値である場合に省略されます。フィールドの型が`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回実行されるため、高コストなセットアップおよびクリーンアップの処理は一度だけ実行されます。関数の呼び出しパラメータと結果は生存状態に保たれ、コンパイラがループ本体を完全に最適化により除去することを防ぎます。

Go 1.24は、言語およびそのエコシステムのさまざまな側面で大幅な改善をもたらす、重要なリリースとなる見込みです。

![Go 1.24の概要](/assets/images/whats-new-in-go1.24/overview.webp)
