Goブログ
Goの14年

本日、Goのオープンソースリリース14周年を祝います!Goは、2つの機能満載のリリースとその他の重要なマイルストーンを経て、素晴らしい一年を過ごしました。
2月にGo 1.20、8月にGo 1.21をリリースし、新しい言語変更よりも実装の改善に重点を置きました。
プロファイルガイド最適化(PGO)は、Go 1.20でプレビューされ、Go 1.21でリリースされ、Goコンパイラがプログラムのプロファイルを読み取り、最も頻繁に実行されるプログラムの部分を最適化するのに時間を費やすことができます。Go 1.21では、ワークロードはPGOを有効にすることで、通常2%から7%のCPU使用率が向上します。概要については「Go 1.21におけるプロファイルガイド最適化」を参照し、完全なドキュメントについてはプロファイルガイド最適化ユーザーガイドを参照してください。
Goは、Go 1.2以降、go test
中にカバレッジプロファイルを収集するためのサポートを提供してきました。Go 1.2以降。Go 1.20では、go build
でビルドされたバイナリでカバレッジプロファイルを収集するためのサポートが追加され、より大規模な統合テスト中にカバレッジを収集できるようになりました。詳細については、「Go統合テストのコードカバレッジ」を参照してください。
互換性は、「Go 1とGoプログラムの未来」以来、Goの重要な部分です。Go 1.21は、重要なバグ修正など、許可する必要があるものの、既存のプログラムを壊す可能性のある変更を行う必要がある状況で、GODEBUGの使用に関する規則を拡張することで、互換性をさらに向上させました。概要についてはブログ記事「下位互換性、Go 1.21、およびGo 2」を、詳細についてはドキュメント「Go、下位互換性、およびGODEBUG」を参照してください。
Go 1.21では、組み込みのツールチェーン管理のサポートも出荷され、他の依存関係のバージョンを変更するのと同じくらい簡単に、特定のモジュールで使用するGoツールチェーンのバージョンを変更できます。概要についてはブログ記事「Go 1.21における前方互換性とツールチェーン管理」を、詳細についてはドキュメント「Goツールチェーン」を参照してください。
もう1つの重要なツール成果は、オンディスクインデックスをGo LSPサーバーであるgoplsに統合したことです。これにより、一般的なユースケースでgoplsの起動レイテンシーとメモリ使用量が3〜5倍削減されました。「成長するGoエコシステムに向けたgoplsのスケーリング」で技術的な詳細が説明されています。最新のgoplsを実行していることを確認するには、次を実行します
go install golang.org/x/tools/gopls@latest
Go 1.21では、新しいcmp、maps、およびslicesパッケージ(Goの最初のジェネリック標準ライブラリ)が導入され、比較可能な型のセットが拡張されました。詳細については、ブログ記事「すべての比較可能な型」を参照してください。
全体として、ジェネリックスの改良を続け、重要な詳細を説明する講演やブログ記事を書いています。今年の注目すべき投稿は、「型パラメータの分解」と「型推論についてあなたが常に知りたかったことと、もう少し」です。
Go 1.21のもう1つの重要な新しいパッケージはlog/slogで、標準ライブラリに構造化ロギングのための公式APIを追加します。概要については、「slogによる構造化ロギング」を参照してください。
WebAssembly(Wasm)ポートの場合、Go 1.21ではWebAssembly System Interface(WASI)プレビュー1での実行のサポートが出荷されました。WASIプレビュー1は、ほとんどのサーバーサイドWasm環境でサポートされているWasm用の新しい「オペレーティングシステム」インターフェイスです。チュートリアルについては、「GoでのWASIサポート」を参照してください。
セキュリティ面では、7月にGovulncheck 1.0がリリースされ、開発者が依存関係と脆弱性を理解するのを支援する上で、Goが引き続き先導的な役割を果たすように努めています。VS Codeを使用している場合は、Go拡張機能を使用してエディターでgovulncheckを直接実行できます。開始するには、このチュートリアルを参照してください。GitHubを使用している場合は、govulncheck用のGitHubアクションを使用して、CI/CDの一部としてgovulncheckを実行できます。脆弱性問題に関する依存関係の確認の詳細については、今年のGoogle I/Oでの講演「GoとGoogleでより安全なアプリを構築する」を参照してください。)
もう1つの重要なセキュリティマイルストーンは、Go 1.21の再現性の高いツールチェーンビルドでした。詳細については、「完全に再現可能で検証済みのGoツールチェーン」を参照してください。これには、Linuxツールを一切使用せずにMacでUbuntu Linux Goツールチェーンを再現するデモが含まれます。
多忙な一年でした!
Goの15年目には、大規模なソフトウェアエンジニアリングにとってGoが最適な環境となるよう努力を続けます。特に楽しみにしている変更の1つは、意図しないエイリアシングバグの可能性を排除するために、forループの:=
セマンティクスを再定義することです。詳細については、「Go 1.22でのForループの修正」を参照してください。これには、Go 1.21でのこの変更をプレビューする手順も含まれます。
ありがとうございます!
Goプロジェクトは、GoogleのGoチームの私たちだけのものではありません。Goを今日の姿にしたすべての貢献者とGoコミュニティの皆様に感謝します。今後の1年で皆様のご活躍を心よりお祈り申し上げます。