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


# Go 1.21 がリリースされました！

[Go 1.21 is released!](https://go.dev/blog/go1.21) by Eli Bendersky, on behalf of the Go team

本日、Goチームは Go 1.21 をリリースできることを大変嬉しく思います。[ダウンロードページ](https://go.dev/dl/) から入手できます。

Go 1.21 には新機能や改善が満載です。ここでは注目すべき変更点をいくつか紹介します。
全リストについては [リリースノート](https://go.dev/doc/go1.21) を参照してください。

## ツールの改善

* Go 1.20 で[プレビューとして発表した](https://go.dev/blog/pgo-preview)プロファイル誘導最適化
  (Profile Guided Optimization、PGO) 機能が、正式に一般提供されました。メインパッケージの
  ディレクトリに `default.pgo` という名前のファイルがあると、`go` コマンドはそれを使ってPGOビルドを
  有効にします。詳細は [PGOのドキュメント](https://go.dev/doc/pgo) を参照してください。幅広い
  Goプログラムに対してPGOの効果を計測したところ、2〜7%のパフォーマンス向上が見られました。
* [`go` ツール](https://go.dev/cmd/go)は、[後方](https://go.dev/doc/godebug)および
  [前方](https://go.dev/doc/toolchain)の言語互換性をサポートするようになりました。

## 言語の変更

* 新しい組み込み関数として [min、max](https://go.dev/ref/spec#Min_and_max) と
  [clear](https://go.dev/ref/spec#Clear) が追加されました。
* ジェネリック関数の型推論にいくつかの改善が加えられました。
  [言語仕様における型推論の説明](https://go.dev/ref/spec#Type_inference)も拡充され、明確になっています。
* 将来のGoのバージョンでは、Goプログラミングで最もよくあるつまずきの一つである
  [ループ変数のキャプチャ](https://go.dev/wiki/CommonMistakes)に対処する予定です。Go 1.21には、
  この機能のプレビューが含まれており、環境変数を使ってコード内で有効にできます。詳細は
  [LoopvarExperiment のwikiページ](https://go.dev/wiki/LoopvarExperiment) を参照してください。

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

* 構造化ロギングのための新しい [log/slog](https://pkg.go.dev/log/slog) パッケージ。
* 任意の要素型のスライスに対する一般的な操作のための新しい [slices](https://pkg.go.dev/slices)
  パッケージ。これには、[sort](https://pkg.go.dev/sort) パッケージよりも概して高速で扱いやすい
  ソート関数が含まれています。
* 任意のキー型や要素型のマップに対する一般的な操作のための新しい [maps](https://pkg.go.dev/maps) パッケージ。
* 順序付け可能な値を比較するための新しいユーティリティを備えた新しい [cmp](https://pkg.go.dev/cmp) パッケージ。

## パフォーマンスの改善

PGOを有効にした場合のパフォーマンス向上に加えて、次のような改善もあります。

* Goコンパイラ自体もPGOを有効にして1.21向けに再ビルドされており、その結果、ホストアーキテクチャに
  応じて2〜4%速くGoプログラムをビルドできるようになりました。
* ガベージコレクタのチューニングにより、アプリケーションによってはテールレイテンシが最大40%
  削減される場合があります。
* [runtime/trace](https://pkg.go.dev/runtime/trace) によるトレースの収集は、amd64とarm64において
  大幅にCPUコストが小さくなりました。

## WASIへの新しい移植

Go 1.21では、[WebAssembly System Interface (WASI)](https://wasi.dev/) Preview 1
(`GOOS=wasip1`、`GOARCH=wasm`) 向けの実験的な移植が追加されました。

より汎用的なWebAssembly (Wasm) コードを書きやすくするため、コンパイラはWasmホストから関数を
インポートするための新しいディレクティブ `go:wasmimport` にも対応しています。

---

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

Go 1.21をお楽しみください！

By Eli Bendersky, on behalf of the Go team

