Go 1.19 がリリースされました!

Go 1.19 is released! by The Go Team

本日、Goチームは喜びとともにGo 1.19をリリースします。ダウンロードページから入手できます。

Go 1.19は、今年前半にリリースした大規模なGo 1.18を洗練させ、改善するリリースです。 Go 1.19でのジェネリクスの開発は、コミュニティから報告されたこまかな問題やコーナーケースへの対応に力を入れました。 それに加えて、一部のジェネリックなプログラムでは最大20%というパフォーマンスの重要な改善も行われています。

docコメントはリンク、リスト、そしてより明確な見出しの構文をサポートするようになりました。 この変更によって、特に大規模なAPIを持つパッケージでは、ユーザーがより明快でナビゲートしやすいdocコメントを 書けるようになります。この変更の一環として、gofmt はこれらの機能の使用箇所に標準的な整形を適用するように、 docコメントを再整形するようになりました。詳細はすべて「Go Doc Comments」を参照してください。

Goのメモリモデルは、sync/atomicパッケージの 振る舞いを明示的に定義するようになりました。happens-before関係の正式な定義は、C、C++、Java、JavaScript、Rust、 Swiftで使われているメモリモデルと足並みをそろえるように改訂されています。既存のプログラムへの影響はありません。 このメモリモデルの更新にあわせて、atomic.Int64atomic.Pointer[T]といった sync/atomicパッケージの新しい型が加わり、アトミックな値をより 使いやすくしています。

セキュリティ上の理由から、os/execパッケージはPATH検索で 相対パスを尊重しなくなりました。詳細はパッケージのドキュメント を参照してください。既存のgolang.org/x/sys/execabsの利用箇所は、 Go 1.19以降のみでビルドされるプログラムであればos/execに戻せます。

ガベージコレクタにはソフトメモリ制限のサポートが追加されました。詳細は 新しいガベージコレクションガイドで詳しく説明しています。 この制限は、割り当てられたメモリ量が決まっているコンテナ内でGoプログラムをできるだけ効率的に動作させるように 最適化する際に特に役立ちます。

新しいビルド制約 unix は、対象のオペレーティングシステム(GOOS)がUnix系システムであれば満たされます。 現時点では、Unix系とはGoの対象オペレーティングシステムのうち jsplan9windowszos を除いたすべてを意味します。

最後に、Go 1.19には、スタックのコピーを減らすための初期ゴルーチンスタックの動的なサイズ調整、 ほとんどのUnixシステムでの追加のファイルディスクリプタの自動利用、x86-64とARM64における大規模なswitch文向けの ジャンプテーブル、ARM64でのデバッガによる関数呼び出しの注入のサポート、RISC-Vでのレジスタベースの呼び出し規約 (register ABI)のサポート、そしてLoongson 64ビットアーキテクチャLoongArch(GOARCH=loong64)上で動作するLinuxの 実験的サポートなど、多岐にわたるパフォーマンスと実装の改善が含まれています。

コードを書き、バグを報告し、フィードバックを共有し、ベータ版やリリース候補版をテストすることでこのリリースに 貢献してくれたすべての人々に感謝します。皆さんの尽力のおかげで、Go 1.19はできる限り安定したものになりました。 いつものことですが、何か問題に気づいたらissueを作成してください

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

By The Go Team