> Source: https://www.ymotongpoo.com/works/goblog-ja/go1.24/


# Go 1.24 リリース

[Go 1.24 is released!](https://go.dev/blog/go1.24) by Junyang Shao, on behalf of the Go team

本日Goチームは、Go 1.24をリリースしました。[ダウンロードページ](https://go.dev/dl/) から入手できます。

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

## 言語の変更

Go 1.24では [ジェネリック型エイリアス](https://go.dev/issue/46477) が完全にサポートされました。
型エイリアスは、定義済みの型と同じようにパラメータ化できます。詳細は
[言語仕様](https://go.dev/ref/spec#Alias_declarations) を参照してください。

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

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

## ツールの改善

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

## 標準ライブラリの追加

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

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

* 新しい [`os.Root`](https://go.dev/pkg/os#Root) 型により、特定のディレクトリ配下に限定した
  ファイルシステム操作ができるようになりました。詳しくはリリースノートの
  [ディレクトリに限定したファイルシステムアクセス](https://go.dev/doc/go1.24#directory-limited-filesystem-access)
  の項を参照してください。

* ランタイムには新しいファイナライズの仕組みである [`runtime.AddCleanup`](https://go.dev/pkg/runtime#AddCleanup)
  が追加されました。これは [`runtime.SetFinalizer`](https://go.dev/pkg/runtime#SetFinalizer) よりも柔軟で、
  効率的で、エラーの起きにくいものです。詳しくはリリースノートの
  [クリーンアップ](https://go.dev/doc/go1.24#improved-finalizers) の項を参照してください。

## WebAssemblyサポートの改善

Go 1.24では、GoのプログラムがWebAssemblyのホストに関数をエクスポートするための新しい
`go:wasmexport` ディレクティブが追加され、GoプログラムをWASIの
[reactor/library](https://github.com/WebAssembly/WASI/blob/63a46f61052a21bfab75a76558485cf097c0dbba/legacy/application-abi.md#current-unstable-abi)
としてビルドできるようになりました。詳しくはリリースノートの
[WebAssembly](https://go.dev/doc/go1.24#wasm) の項を参照してください。

---

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

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

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

By Junyang Shao, on behalf of the Go team

