Go ブログ

Go 1.6 がリリースされました

Andrew Gerrand
2016年2月17日

本日、Go の7番目の主要な安定版リリースであるGo version 1.6をリリースしました。ダウンロードページからすぐにダウンロードできます。6ヶ月前のGo 1.5 のリリースには大幅な実装変更が含まれていましたが、今回のリリースはより段階的なものです。

最も重要な変更点は、net/http パッケージでのHTTP/2のサポートです。HTTP/2 は新しいプロトコルであり、HTTP の後継として、ブラウザベンダーや主要なウェブサイトで既に広く採用されています。Go 1.6 では、HTTPS を使用する場合、サーバーとクライアントの両方で HTTP/2 のサポートがデフォルトで有効になり、新しいプロトコルの利点を、人気のCaddy web サーバーなどの幅広い Go プロジェクトにもたらします。

テンプレートパッケージは、よりクリーンなテンプレート出力を作成するためのテンプレートアクションの周りのスペースのトリミングのサポートと、他のテンプレートを基に構築するテンプレートの作成に使用できる{{block}}アクションの導入により、いくつかの新しい機能を習得しました。新しいテンプレートの例プログラムがこれらの新機能を示しています。

Go 1.5 では、環境変数によって有効にされた「vendor」ディレクトリの実験的なサポートが導入されました。Go 1.6 では、この機能がデフォルトで有効になりました。「vendor」という名前のディレクトリが新しい機能に従って使用されていないソースツリーは、ビルドの破損を回避するために変更が必要です(最も簡単な修正方法は、ディレクトリの名前を変更することです)。

ランタイムは、マップの同時使用の誤用を検出するための軽量で最善を尽くす検出を追加しました。常に、1つのゴルーチンがマップに書き込んでいる場合、他のゴルーチンはマップを同時に読み書きしてはなりません。ランタイムがこの状態を検出すると、診断を出力してプログラムをクラッシュさせます。問題に関する詳細を知る最良の方法は、race detectorの下で実行することです。これにより、競合状態をより確実に特定し、より詳細な情報を得ることができます。

ランタイムは、プログラムを終了させるパニックの出力方法も変更しました。これからは、すべての実行中のゴルーチンではなく、パニックを起こしたゴルーチンのみのスタックを出力します。この動作は、GOTRACEBACK 環境変数を使用するか、debug.SetTraceback 関数を呼び出すことで設定できます。

cgo のユーザーは、Go と C コード間でポインタを共有するためのルールの大幅な変更に注意する必要があります。これらのルールは、そのような C コードが Go のガベージコレクタと共存できることを保証するように設計されており、プログラムの実行中にチェックされるため、クラッシュを回避するためにコードの変更が必要になる場合があります。リリースノートcgo ドキュメントで詳細を確認してください。

コンパイラ、リンカ、go コマンドには、-raceと同様の新しい-msanフラグがあり、linux/amd64でのみ使用でき、Clang MemorySanitizerとの相互運用を有効にします。これは、疑わしい C または C++ コードを含むプログラムのテストに役立ちます。新しいポインタルールで cgo コードをテストする際に試してみてください。

Go 1.6 で構築された Go プログラムのパフォーマンスは、Go 1.5 で構築されたプログラムとほぼ同じです。ガベージコレクションの停止時間は Go 1.5 よりもさらに短くなっていますが、これは大量のメモリを使用するプログラムで特に顕著です。コンパイラツールチェーンのパフォーマンスに関しては、ビルド時間は Go 1.5 とほぼ同じです。

sort.Sort 内のアルゴリズムは約 10%高速化されましたが、等しいが区別可能な要素の特定の順序を期待するプログラムが壊れる可能性があります。そのようなプログラムは、必要な順序を示すために Less メソッドを改良するか、等しい値の入力順序を保持するためにsort.Stableを使用する必要があります。

そしてもちろん、さらに多くの追加、改善、修正があります。それらはすべて包括的なリリースノートで見つけることができます。

リリースを祝うために、世界中の Go ユーザーグループは2月17日にリリースパーティーを開催します。オンラインでは、Go の貢献者たちが今後24時間、golang サブレディットで質疑応答セッションを開催します。プロジェクト、リリース、または Go全般についてご質問がありましたら、ディスカッションに参加してください。

リリースに貢献してくれた皆さんに感謝します。ハッキングを楽しんでください。

次の記事: Go 1.7 がリリースされました
前の記事: Go での言語とロケールの照合
ブログインデックス