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

Go 1.23 is released by Dmitri Shuralyov, on behalf of the Go team

本日Goチームは、ダウンロードページからダウンロードできる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バージョンのモジュール要件の管理を参照してください。

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にはジェネリック型エイリアスのプレビューサポートも含まれています。

詳しくはリリースノートの言語の変更イテレータをご覧ください。

ツールの改善

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

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

go vet サブコマンドは、対象のGoバージョンに対して新しすぎるシンボルを報告するようになりました。詳しくはリリースノートのツールを参照してください。

標準ライブラリの改善

Go 1.23では time.Timertime.Ticker の実装が改善されました。詳しくはリリースノートのタイマーの変更をご覧ください。

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

標準ライブラリにはリリースノートのライブラリへの細かな変更セクションに列挙されている、多くの改善と追加があります。また「Go、後方互換性、そしてGODEBUG」ドキュメントには、Go 1.23で新たに追加されたGODEBUG設定が列挙されています。

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

その他の改善と変更

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

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

これらの変更、そしてGo 1.23のその他すべての新機能について、完全かつ詳細な情報を知りたい方は、ぜひGo 1.23リリースノートをお読みください。

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


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

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

By Dmitri Shuralyov, on behalf of the Go team