The Go Blog
Go 15周年

「15パズル」をするゴーファーを描き、アニメーションにしてくれたRenee Frenchに感謝します。
誕生日おめでとう、Go!
日曜日、Goオープンソースリリースの15周年を祝いました!
Goの10周年から、Go自身も世界も大きく変化しました。その一方で、変わらないことも多くあります。Goは、安定性、安全性、そして大規模なソフトウェアエンジニアリングと本番環境のサポートに引き続き取り組んでいます。
そしてGoは好調です!Goのユーザーベースは過去5年間で3倍以上に増加し、最も急速に成長している言語の1つとなっています。わずか15年前の誕生以来、Goはトップ10の言語となり、現代のクラウドの言語となりました。
2月のGo 1.22と8月のGo 1.23のリリースにより、今年は`for`ループの年となりました。Go 1.22では、`for`ループで導入される変数が、ループごとではなく、イテレーションごとにスコープを持つようになり、長年の言語の「落とし穴」に対処しました。10年以上前、Go 1のリリースに向けて、Goチームはいくつかの言語の詳細について決定を下しました。その中には、`for`ループが各イテレーションで新しいループ変数を作成すべきかどうかも含まれていました。興味深いことに、その議論は非常に短く、明確な意見はありませんでした。Rob Pikeは、彼の真骨頂である一言「stet」(そのままにしておく)で締めくくりました。そしてそうなりました。当時としては取るに足らないことのように思えましたが、長年の本番環境での経験がこの決定の持つ意味を浮き彫りにしました。しかし、その間に、Goへの変更の影響を理解するための堅牢なツール(特に、Googleの全コードベースにわたるエコシステム全体での分析とテスト)を構築し、コミュニティと協力しフィードバックを得るプロセスを確立しました。広範なテスト、分析、コミュニティでの議論を経て、変更を展開し、開発者が大規模なコードベースで変更の影響を受けるコードを特定するのに役立つハッシュバイセクションツールも併せて提供しました。
`for`ループへの変更は、5年間にわたる段階的な変更の軌跡の一部でした。これは、Go 1.21で導入された前方言語互換性なしには不可能でした。これは、さらに4年半前のGo 1.14で導入されたGoモジュールの基盤の上に構築されています。
Go 1.23では、この変更をさらに発展させ、イテレータとユーザー定義のfor-rangeループを導入しました。わずか2年半前のGo 1.18で導入されたジェネリクスと組み合わせることで、カスタムコレクションやその他の多くのプログラミングパターンにとって強力で人間工学に基づいた基盤が構築されます。
これらのリリースはまた、標準ライブラリのHTTPルーターへの待望の機能強化、実行トレースの完全な見直し、そしてすべてのGoアプリケーションに対するより強力な乱数など、本番環境の準備を整えるための多くの改善をもたらしました。さらに、初のv2標準ライブラリパッケージの導入は、将来のライブラリの進化と近代化のためのテンプレートを確立します。
昨年、Goツールのオプトインテレメトリを慎重に展開してきました。このシステムは、Goの開発者に、完全にオープンで匿名のままで、より良い意思決定を行うためのデータを提供します。Goテレメトリは、Go言語サーバーであるgoplsに最初に導入され、すでに数多くの改善につながっています。この取り組みは、Goでのプログラミングをすべての人にとってさらに良い体験にするための道を開きます。
今後、Goは現在および将来のハードウェアの機能をより効果的に活用できるように進化しています。過去15年間でハードウェアは大きく変化しました。今後15年間もGoが高性能で大規模な本番ワークロードをサポートし続けるためには、大規模なマルチコア、高度な命令セット、そしてますます非均一なメモリ階層における局所性の重要性の高まりに適応する必要があります。これらの改善の一部は透過的になります。Go 1.24では、最新のCPUでより効率的な、内部でまったく新しい`map`の実装が導入されます。また、最新のハードウェアの能力と制約に基づいて設計された新しいガベージコレクションアルゴリズムのプロトタイプを作成しています。一部の改善は、Go開発者が最新のハードウェアをより効果的に活用できるように、新しいAPIとツールの形で行われます。最新のベクトルおよび行列ハードウェア命令のサポート方法、およびアプリケーションがCPUとメモリの局所性を構築するための複数の方法を検討しています。私たちの取り組みを導く中心的な原則は、*構成可能な最適化*です。コードベースへの最適化の影響は、可能な限り局所化されるべきであり、コードベースの残りの部分での開発の容易さが損なわれないようにします。
Goの標準ライブラリがデフォルトで安全であり、設計上安全であることを引き続き保証しています。これには、FIPS認定暗号化の組み込みのネイティブサポートを組み込むための継続的な取り組みが含まれており、FIPS暗号は、必要なアプリケーションにとってはフラグをフリップするだけで利用できるようになります。さらに、可能な限りGoの標準ライブラリパッケージを進化させ、`math/rand/v2`の例に倣って、新しいAPIが安全でセキュアなGoコードの記述を大幅に強化できる場所を検討しています。
AIインフラストラクチャ、アプリケーション、開発者支援におけるGoの機能を強化することで、GoをAIにとってより良く、AIをGoにとってより良くすることに取り組んでいます。Goは本番システムを構築するのに優れた言語であり、本番*AI*システムを構築するのにも優れた言語になることを望んでいます。クラウドインフラストラクチャの言語としてのGoの信頼性により、GoはLLM インフラストラクチャ にも 自然な選択肢となりました。AIアプリケーション向けには、LangChainGoやGenkitを含む人気のあるAI SDKにおけるGoのファーストクラスサポートを構築し続けます。そして、その最初から、Goはエンドツーエンドのソフトウェアエンジニアリングプロセスを改善することを目的としていたため、当然、AIからの最新のツールと技術を開発者の苦労を軽減するために活用し、実際のプログラミングのような楽しいことにもっと時間を残すことを検討しています!
ありがとうございます
これらすべては、Goの素晴らしい貢献者と活気あるコミュニティのおかげで可能になりました。15年前、Goがこれほど成功し、Goを中心にコミュニティが発展するとは夢にも思いませんでした。大小を問わず、役割を果たしてくれたすべての人に感謝します。来る年に皆さんのご多幸をお祈りします。
次の記事: Go Protobuf: 新しいOpaque API
前の記事: 別名に何がある?
ブログインデックス