Goブログ
Go 13周年

本日、Goオープンソースリリースの13周年を祝います。Goファーは10代になりました!
Goにとって実りある一年でした。最も重要な出来事は、3月のGo 1.18リリースでした。これは多くの改善をもたらしましたが、最も注目すべきはGoワークスペース、ファジング、ジェネリックスです。
ワークスペースを使用すると、複数のモジュールを同時に簡単に操作できます。これは、モジュール間の依存関係を持つ関連するモジュールのセットを保守する場合に最も役立ちます。ワークスペースの詳細については、Beth Brownのブログ記事「ワークスペースに慣れてみよう」とワークスペースのリファレンスを参照してください。
ファジングは、go
test
の新しい機能で、コードが適切に処理できない入力を見つけるのに役立ちます。あらゆる入力に対して合格する必要があるファズテストを定義し、ファジングはコードカバレッジによってガイドされ、さまざまなランダムな入力を試して、ファズテストが失敗するようにします。ファジングは、任意の(攻撃者が制御する可能性のある)入力に対して堅牢でなければならないコードを開発する場合に特に役立ちます。ファジングの詳細については、チュートリアル「ファジング入門」とファジングのリファレンスを参照し、Katie HockmanのGopherCon 2022講演「Fuzz Testing Made Easy」に注目してください。これは近日中にオンラインになる予定です。
おそらくGoで最も要望が多かった機能であるジェネリックスは、Goにパラメトリック多相性(パラメトリックポリモーフィズム)を追加し、さまざまな異なる型で動作するが、コンパイル時に静的にチェックされるコードの記述を可能にします。ジェネリックスの詳細については、チュートリアル「ジェネリックス入門」を参照してください。詳細については、ブログ記事「ジェネリックス入門」と「ジェネリックスの使用タイミング」、または講演「Goでのジェネリックスの使用」(2021年Google Open Source LiveでのGo Day)と「ジェネリックス!」(2021年GopherCon)をRobert GriesemerとIan Lance Taylorが発表しています。
8月のGo 1.19リリースは、Go 1.18に導入された機能の改良と改善、内部の安定性の向上、最適化に重点を置いていたため、Go 1.18と比較して比較的静かなものでした。Go 1.19の目に見える変更の1つは、Goドキュメントコメントへのリンク、リスト、見出しのサポートの追加です。もう1つは、ガベージコレクターのソフトメモリ制限の追加で、これはコンテナワークロードで特に役立ちます。最近のガベージコレクターの改善の詳細については、Michael Knyszekのブログ記事「Goランタイム:4年後」、彼の講演「Goでのメモリ制限の尊重」、そして新しい「Goガベージコレクターガイド」を参照してください。
特にVS Code GoとGopls言語サーバーの作業において、Go開発をますます大規模なコードベースにスムーズにスケーリングできるようにするための作業を続けてきました。今年、Goplsリリースは、安定性とパフォーマンスの向上に重点を置きながら、ジェネリックスのサポートと新しい分析およびコードレンズを提供することに重点を置いています。まだVS Code GoまたはGoplsを使用していない場合は、ぜひお試しください。Suzy Muellerの講演「Goエディターを使用したより優れたプロジェクトの構築」の概要をご覧ください。そしてボーナスとして、VS CodeでのGoのデバッグは、Delveのネイティブなデバッグアダプタープロトコルサポートにより、より信頼性が高く、強力になりました。Suzyの「デバッグ宝探し」を試してみてください!
開発規模のもう一つの要素は、プロジェクトの依存関係の数です。Goの12周年記念日の約1ヶ月後、Log4Shellの脆弱性は、サプライチェーンセキュリティの重要性について業界に警鐘を鳴らしました。Goのモジュールシステムは、この目的のために特別に設計されており、依存関係の理解と追跡、使用している特定の依存関係の特定、既知の脆弱性があるかどうかを判断するのに役立ちます。Filippo Valsordaのブログ記事「Goがサプライチェーン攻撃を軽減する方法」では、当社の取り組みの概要について説明しています。9月には、Julie Qiuのブログ記事「Goの脆弱性管理」で、Goの脆弱性管理へのアプローチについてプレビューを行いました。この作業の中心は、新しいキュレーションされた脆弱性データベースと、モジュール要件のみを使用することによる偽陽性をほとんど排除するために高度な静的分析を使用する新しいgovulncheckコマンドです。
Goユーザーを理解するための取り組みの一環として、毎年年末にGoに関するアンケートを実施しています。今年は、ユーザーエクスペリエンスリサーチャーが軽量なGoに関する中間アンケートも追加しました。Goコミュニティ全体に負担をかけることなく、統計的に有意な数の回答を集めることを目指しています。結果は、Alice Merrickのブログ記事「Go開発者調査2021の結果」とTodd Kuleszaの記事「Go開発者調査2022年第2四半期の結果」を参照してください。
世界中がより多く移動し始めたため、2022年のGoカンファレンス、特に7月のベルリンでのGopherCon Europeと10月のシカゴでのGopherConで、多くの方々と直接お会いできて嬉しく思っています。先週、年間恒例のバーチャルイベントであるGo Day on Google Open Source Liveを開催しました。これらのイベントで発表した講演の一部をご紹介します。
- GopherCon EuropeでのCameron Balahanによる「Goがどのように最高の自分になったか」。
- GopherCon EuropeでのCameron Balahan、Michael Knyszek、Than McIntoshによる「GoチームQ&A」。
- GopherConでのRuss Coxによる「互換性:Goプログラムが動作し続ける方法」。
- GopherConでのCameron Balahanによる「包括的なGoエクスペリエンス」(ビデオはまだ投稿されていません)。
- Go Day on Google Open Source LiveでのJonathan Amsterdamによる「Goのための構造化ログ」。
- Go Day on Google Open Source LiveでのCody Ossによる「Goでアプリケーションをより高速かつ安全に開発する」。
- Go Day on Google Open Source LiveでのMichael Knyszekによる「Goでのメモリ制限の尊重」。
今年のもう一つの大きな出来事は、Russ Cox、Robert Griesemer、Rob Pike、Ian Lance Taylor、Ken Thompsonによる「The Go Programming Language and Environment」が*Communications of the ACM*に掲載されたことです。Goのオリジナル設計者と実装者によるこの記事では、Goがこれほど人気があり生産性が高い理由について説明しています。簡単に言えば、Goの取り組みは、大規模なソフトウェアエンジニアリングの取り組みと大規模な展開の両方にスケーリングすることに重点を置いた、ソフトウェア開発プロセス全体を対象とした完全な開発環境を提供することに重点を置いています。
Goの14年目には、Goを大規模なソフトウェアエンジニアリングのための最高の環境にするために努力を続け、サプライチェーンセキュリティ、互換性の向上、構造化ログ(すべてこの投稿ですでにリンクされています)に特に重点を置く予定です。そして、プロファイルガイド付き最適化など、他にも多くの改善が加えられるでしょう。
ありがとうございます!
Goは、GoogleのGoチームが行うこと以上のものです。Goを今日の成功したプログラミング環境にしているお手伝いをしてくださった皆様、貢献者の皆様、そしてGoコミュニティの皆様に感謝申し上げます。来年もよろしくお願い致します。
次の記事:Goでの開発に関するフィードバックを共有する
前の記事:Goランタイム:4年後
ブログインデックス