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


# Go 1.23 がリリースされました

[Go 1.23 is released](https://go.dev/blog/go1.23) by Dmitri Shuralyov, on behalf of the Go team

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

すでにマシンにGo 1.22またはGo 1.21がインストールされている場合は、既存のモジュール内で `go get toolchain@go1.23.0` を試すこともできます。これにより新しいツールチェインがダウンロードされ、すぐにモジュール内でそれを使い始められます。後で完全にGo 1.23に切り替える準備ができたら、`go get go@1.23.0` を実行して、それをモジュールの最小要求Goバージョンにできます。この機能の詳細については、[go getによるGoバージョンのモジュール要件の管理](https://go.dev/doc/toolchain#get)を参照してください。

Go 1.23にはGo 1.22から多くの改善が加えられています。その中のいくつかのハイライトを紹介します。

## 言語の変更

「for-range」ループの範囲式に、`func(func(K) bool)` のようなイテレータ関数を指定できるようになりました。これにより、任意のシーケンスに対するユーザー定義のイテレータがサポートされます。標準の `slices` パッケージと `maps` パッケージにはイテレータを扱うためのいくつかの機能が追加されたほか、新しい `iter` パッケージも追加されました。例えば、マップ `m` のキーをスライスに集めてソートしたい場合、Go 1.23では `slices.Sorted(maps.Keys(m))` と書くだけで実現できます。

Go 1.23にはジェネリック型エイリアスのプレビューサポートも含まれています。

詳しくはリリースノートの[言語の変更](https://go.dev/doc/go1.23#language)と[イテレータ](https://go.dev/doc/go1.23#iterators)をご覧ください。

## ツールの改善

Go 1.23からは、Goツールチェインの使われ方やその効果を把握する助けとなるよう、Goツールチェインが利用状況や不具合の統計を収集できるようになりました。これはGoテレメトリーと呼ばれる、オプトイン方式の仕組みです。Goを良好な状態に保ち、Goの利用状況をより深く理解する助けとなるよう、ぜひオプトインをご検討ください。詳しくはリリースノートの[Goテレメトリー](https://go.dev/doc/go1.23#telemetry)の項目をご覧ください。

`go` コマンドにはいくつかの便利な新機能が追加されました。例えば、`go env -changed` を実行すると、実際の値がデフォルト値と異なる設定だけを簡単に確認できるようになりました。また `go mod tidy -diff` を使うと、go.modとgo.sumファイルを実際に変更することなく、必要な変更内容を確認できます。詳しくはリリースノートの[goコマンド](https://go.dev/doc/go1.23#go-command)の項目に説明があります。

`go vet` サブコマンドは、対象のGoバージョンに対して新しすぎるシンボルを報告するようになりました。詳しくはリリースノートの[ツール](https://go.dev/doc/go1.23#tools)を参照してください。

## 標準ライブラリの改善

Go 1.23では `time.Timer` と `time.Ticker` の実装が改善されました。詳しくはリリースノートの[タイマーの変更](https://go.dev/doc/go1.23#timer-changes)をご覧ください。

Go 1.23の標準ライブラリには、`iter`、`structs`、`unique` という合計3つの新しいパッケージが追加されました。`iter` パッケージは前述の通りです。`structs` パッケージは構造体のプロパティを変更するためのマーカー型を定義します。`unique` パッケージは比較可能な値を正規化する（「インターン化」する）ための機能を提供します。詳しくはリリースノートの[新しい標準ライブラリパッケージ](https://go.dev/doc/go1.23#new-unique-package)を参照してください。

標準ライブラリにはリリースノートの[ライブラリへの細かな変更](https://go.dev/doc/go1.23#minor_library_changes)セクションに列挙されている、多くの改善と追加があります。また「Go、後方互換性、そしてGODEBUG」ドキュメントには、[Go 1.23で新たに追加されたGODEBUG設定](https://go.dev/doc/godebug#go-123)が列挙されています。

Go 1.23では、2つ前のリリース（Go 1.21）で利用可能になった `//go:debug` ディレクティブコメントに加えて、go.modおよびgo.workファイル内で新しい `godebug` ディレクティブがサポートされるようになりました。これにより、デフォルトのGODEBUG設定とgo.modの「go」ディレクティブを個別に制御できます。詳しくは更新された[デフォルトのGODEBUG値](https://go.dev/doc/godebug#default)のドキュメントを参照してください。

## その他の改善と変更

Go 1.23では、64ビットRISC-V向けのOpenBSD（`openbsd/riscv64`）の実験的サポートが追加されました。またLinux、macOS、ARM64、RISC-V、WASIに関連するいくつかの細かな変更もあります。詳しくはリリースノートの[移植対応](https://go.dev/doc/go1.23#ports)を参照してください。

プロファイルガイド最適化（PGO）を使用した際のビルド時間が短縮され、386およびamd64アーキテクチャにおけるPGO利用時のパフォーマンスが改善されました。詳しくはリリースノートの[ランタイム、コンパイラ、リンカ](https://go.dev/doc/go1.23#runtime)を参照してください。

これらの変更、そしてGo 1.23のその他すべての新機能について、完全かつ詳細な情報を知りたい方は、ぜひ[Go 1.23リリースノート](https://go.dev/doc/go1.23)をお読みください。

今後数週間のうちに、ここで触れたトピックの一部について、「range-over-func」、新しい `unique` パッケージ、Go 1.23のタイマー実装の変更などを詳しく取り上げるフォローアップ記事が公開される予定です。お楽しみに。

---

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

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

By Dmitri Shuralyov, on behalf of the Go team

