Go 1.17 リリース

Go 1.17 is released by Matt Pearring and Alex Rakoczy

本日、GoチームはGo 1.17をリリースできることを大変嬉しく思います。バイナリアーカイブとインストーラーは ダウンロードページから入手できます。

今回のリリースでは、関数の引数と戻り値を渡す新しい方式というかたちで、 コンパイラにさらなる改善が加えられています。この変更により、amd64プラットフォームにおいてGoプログラムの パフォーマンスが約5%向上し、バイナリサイズが約2%削減されることが確認されています。他のプラットフォームへの 対応は今後のリリースで行われる予定です。

Go 1.17ではまた、Windows上での64ビットARMアーキテクチャのサポートも 追加され、Gopherたちはより多くのデバイス上でGoをネイティブに実行できるようになりました。

今回のリリースでは、プルーニングされたモジュールグラフも導入されました。 go.modファイル内でgo 1.17以上を指定しているモジュールでは、そのモジュールグラフに、他のGo 1.17モジュールの 推移的な依存関係すべてではなく、直接の依存関係のみが含まれるようになります。これにより、本来関係のない依存関係の go.modファイルをダウンロードしたり読み込んだりする必要がなくなり、日々の開発における時間の節約につながります。

Go 1.17には、言語仕様への3つの小さな変更が加えられています。最初の2つは、 プログラムがunsafe.Pointerのルールに、より簡単に準拠できるようにするための、unsafeパッケージ内の新しい関数です。 unsafe.Addより安全なポインタ演算を可能にし、unsafe.Sliceポインタからスライスへのより安全な変換を可能にします。3つ目の変更は、 実行時にスライスが配列と同じかそれ以上の大きさである限り、 スライスから配列ポインタへの変換を 許可するように、言語の型変換ルールを拡張するものです。

最後に、crypto/x509の検証まわりの改善や、 URLクエリのパース処理の変更をはじめ、その他多くの改善とバグ修正が 行われています。変更点の完全な一覧と、上記の改善に関する詳細については、 完全なリリースノートを参照してください。

コードを書き、バグを報告し、フィードバックを共有し、ベータ版やリリース候補版をテストすることで、今回のリリースに 貢献してくださったすべての方に感謝します。皆さんの努力のおかげで、Go 1.17はできる限り安定したものになりました。 いつものように、何か問題に気づいた場合はissueを立ててください。

新しいリリースを楽しんでいただければ幸いです。

By Matt Pearring and Alex Rakoczy