The Go Blog
Goの11年
本日、Goのオープンソースリリース11周年を祝います。Goの10周年を祝ったパーティーが遠い記憶のように感じられます。大変な一年でしたが、Goの開発は着実に進み、数々の注目すべき成果を上げることができました。
11月には、Goの10周年記念直後にgo.devとpkg.go.devを立ち上げました。
2月には、Go 1.14リリースで、Goモジュールの初の正式な「プロダクションレディ」な実装が提供されました。また、スケジューリングとガベージコレクションの遅延を減らすためのより高速なdeferや非協調的なgoroutineプリエンプションなど、多くのパフォーマンス改善も含まれています。
3月上旬には、プロトコルバッファ用の新しいAPI、google.golang.org/protobufを立ち上げました。これは、プロトコルバッファのリフレクションとカスタムメッセージのサポートが大幅に改善されています。
パンデミックが発生した際、私たちは春に予定していたあらゆる公式発表やローンチを一時停止することを決定しました。皆の注意が当然別のところに向いていることを認識したためです。しかし、私たちは作業を続け、チームメンバーの一人が、世界中の接触追跡活動を支援するためのプライバシー保護曝露通知に関するApple/Googleの共同作業に参加しました。5月には、このグループはGoで書かれたリファレンスバックエンドサーバーを立ち上げました。
goplsの改善も継続し、多くのエディタで高度なGo対応サポートを実現しました。6月には、VSCode Go拡張機能が正式にGoプロジェクトに加わり、現在ではgoplsの開発者と同じチームによってメンテナンスされています。
同じく6月には、皆様からのフィードバックのおかげで、pkg.go.devの裏側のコードもGoプロジェクトの一部としてオープンソース化されました。
6月後半には、ジェネリクスに関する最新のデザインドラフトを発表し、プロトタイプツールとジェネリクスプレイグラウンドも公開しました。
7月には、将来の変更に関する3つの新しいデザインドラフトを公開し、議論しました。ファイル選択用の新しい//go:build行、ファイルシステムインターフェース、そしてビルド時のファイル埋め込みです。(これらはすべて、以下に示すように2021年に実現する予定です。)
8月には、Go 1.15リリースが公開され、新機能よりも主に最適化とバグ修正が中心でした。最も重要なのは、リンカーの書き換えが開始されたことで、大規模なビルドでは平均で20%高速化され、メモリ使用量が30%削減されました。
先月、恒例のGoユーザーアンケートを実施しました。分析が終わり次第、ブログで結果を公開します。
Goコミュニティも他の皆さんと同様に「バーチャルファースト」に適応し、今年は多くのバーチャルミートアップや12を超えるバーチャルGoカンファレンスが開催されました。先週、GoチームはGoogle Open Source LiveでGo dayを主催しました(動画はリンク先で公開されています)。
今後の展望
Goの12年目に向けて、今後何が起こるのか非常に楽しみです。直近では、今週、GoチームのメンバーがGopherCon 2020で8つのイベントをプレゼンします。カレンダーに印をつけておきましょう!
- Robert Griesemerによる講演「Typing [Generic] Go」
11月11日午前10時(米国東部時間); 質疑応答は午前10時30分。 - Hana Kimを含む専門のデバッガーのパネルとのGo Timeポッドキャストのライブ収録、「What to Expect When You’re NOT Expecting」
11月11日午後12時. - Michael Knyszekによる講演「Evolving the Go Memory Manager’s RAM and CPU Efficiency」
11月11日午後1時; 質疑応答は午後1時50分。 - Dan Scalesによる講演「Implementing Faster Defers」
11月11日午後5時10分; 質疑応答は午後5時40分。 - Julie Qiu、Rebecca Stambler、Russ Cox、Sameer Ajmani、Van RiperによるGoチームとのライブQ&A「Go Team - Ask Me Anything」
11月12日午後3時. - Austin Clementsによる講演「Pardon the Interruption: Loop Preemption in Go 1.14」
11月12日午後4時45分; 質疑応答は午後5時15分。 - Jonathan Amsterdamによる講演「Working with Errors」
11月13日午後1時; 質疑応答は午後1時50分。 - Carmen Andohによる講演「Crossing the Chasm for Go: Two Million Users and Growing」
11月13日午後5時55分.
Goリリース
2月には、Go 1.16リリースに新しいファイルシステムインターフェースとビルド時のファイル埋め込みが含まれる予定です。リンカーの書き換えが完了し、さらなるパフォーマンス向上をもたらします。また、新しいApple Silicon (GOARCH=arm64) Macのサポートも含まれます。
8月には、Go 1.17リリースでさらに多くの機能と改善がもたらされることは間違いありませんが、まだ先のことであり、正確な詳細は未定です。x86-64用の新しいレジスタベースの呼び出し規約が含まれ(既存のアセンブリを壊すことなく!)、プログラムが全体的に高速化されます。(他のアーキテクチャは後のリリースで対応予定です。)確実に追加される素晴らしい機能の1つは、現在の// +build行よりもエラーが発生しにくい、新しい//go:build行です。もう1つの非常に期待されている機能で、来年にはベータテストの準備が整うことを期待しているのは、go testコマンドでのファジングのサポートです。
Goモジュール
来年、Goモジュールのサポート開発とGoエコシステム全体への統合を引き続き行います。Go 1.16では、これまでで最もスムーズなGoモジュール体験が提供されるでしょう。最近の調査の予備的な結果として、現在、ユーザーの96%がGoモジュールを採用しています(1年前の90%から増加)。
GOPATHベースの開発のサポートもついに終了します。標準ライブラリ以外の依存関係を使用するプログラムはすべてgo.modを必要とします。(まだモジュールに切り替えていない場合は、GOPATHからモジュールへの移行におけるこの最終ステップの詳細については、GOPATH wikiページを参照してください。)
当初から、Goモジュールの目標は、「Go開発者とツールの両方の作業語彙にパッケージバージョンの概念を追加する」ことであり、Goエコシステム全体でモジュールとバージョンを深くサポートすることでした。Goモジュールミラー、チェックサムデータベース、インデックスは、パッケージバージョンとは何かというこのエコシステム全体の理解によって可能になりました。来年には、さらに多くのツールやシステムに豊富なモジュールサポートが追加されるでしょう。例えば、モジュール作成者が新しいバージョンを公開するのに役立つ新しいツール(go release)や、モジュール利用者が非推奨のAPIから移行するためにコードを更新するのに役立つ新しいgo fixを検討する予定です。
より大きな例として、Goサポートのためにエディターが使用する多くのツール(いずれもモジュールをサポートしていなかった)を、モジュールをサポートする単一のツールに減らすためにgoplsを作成しました。来年には、VSCode Go拡張機能がデフォルトでgoplsを使用するように準備が整い、すぐに優れたモジュール体験が得られるようになり、gopls 1.0をリリースする予定です。もちろん、goplsの最も優れた点の1つは、エディターに依存しないことです。つまり、言語サーバープロトコルを理解するエディターであれば、どれでも使用できます。
バージョン情報のもう一つの重要な用途は、ビルド内の任意のパッケージに既知の脆弱性があるかどうかを追跡することです。来年、既知の脆弱性のデータベースと、そのデータベースに対してプログラムをチェックするツールを開発する予定です。
Goパッケージ発見サイトpkg.go.devは、Goモジュールによって実現されたバージョン対応システムのもう一つの例です。私たちは、本日公開された再設計を含む、コア機能とユーザーエクスペリエンスを正しくすることに注力してきました。来年、私たちはgodoc.orgをpkg.go.devに統合する予定です。また、各パッケージのバージョンタイムラインを拡張し、各バージョンの重要な変更点、既知の脆弱性などを表示することで、依存関係の追加に関する情報に基づいた意思決定を行うために必要な情報を表面化するという全体的な目標に沿って進めます。
GOPATHからGoモジュールへの道のりが終わりに近づき、Goモジュールが実現する優れた依存関係対応ツールがすべて登場することに興奮しています。
ジェネリクス
次に皆が注目している機能は、もちろんジェネリクスです。前述したように、6月にはジェネリクスに関する最新のデザインドラフトを公開しました。それ以来、私たちは未完成の部分を洗練し続け、プロダクションレディなバージョンの実装の詳細に注意を向けてきました。2021年を通じてこれに取り組み、年末までに人々が試せるものを、おそらくGo 1.18のベータ版の一部として用意することを目指しています。
ありがとうございました!
Goは、GoogleのGoチームだけでなく、はるかに大きな存在です。Goのリリースとツールで私たちと共に働くコントリビューターに感謝しています。さらに、Goが成功するのは、活気あるGoエコシステムで働き、貢献する皆様のおかげです。Goの世界の外では困難な一年でした。今まで以上に、皆様が私たちに参加し、Goをこれほど成功させるために時間を割いてくださったことに感謝しています。ありがとうございます。皆様の安全とご多幸を心よりお祈り申し上げます。