> Source: https://www.ymotongpoo.com/works/goblog-ja/go1.7/


# Go 1.7 リリース

[Go 1.7 is released](https://go.dev/blog/go1.7) by Chris Broadfoot

本日、Go 1.7のリリースを発表できることを嬉しく思います。
[ダウンロードページ](https://go.dev/dl/)から入手できます。
今回のリリースにはいくつか重要な変更が含まれています。[IBM System z上のLinux](https://en.wikipedia.org/wiki/IBM_System_z)（s390x）向けの移植、コンパイラの改善、
[context](https://go.dev/pkg/context/)パッケージの追加、そして[階層化されたテストとベンチマーク](https://go.dev/pkg/testing/#hdr-Subtests_and_Sub_benchmarks)のサポートです。

過去1年間、[静的単一代入](https://en.wikipedia.org/wiki/Static_single_assignment_form)（SSA）形式に基づく新しいコンパイラバックエンドの開発が進められてきました。
プログラムをSSA形式で表現することで、コンパイラはより高度な最適化を簡単に行えるようになります。
この新しいバックエンドは、[境界チェックの除去](https://en.wikipedia.org/wiki/Bounds-checking_elimination)や
[共通部分式の除去](https://en.wikipedia.org/wiki/Common_subexpression_elimination)といった最適化を含む、より小さくより効率的なコードを生成します。
私たちのベンチマークでは全体で5〜35%の速度向上が見られました。
現時点では、この新しいバックエンドは64ビットのx86プラットフォーム（「amd64」）でのみ利用可能ですが、
今後のリリースではさらに多くのアーキテクチャ向けバックエンドをSSAに変換していく予定です。

コンパイラのフロントエンドは新しく、より小さなエクスポートデータ形式を使うようになり、`import` 宣言をより効率的に処理するようになりました。
[ツールチェイン全体にわたるこれらの変更](https://go.dev/doc/go1.7#compiler)のほとんどは目に見えるものではありませんが、
ユーザーからは、コンパイル時間の大幅な高速化と、最大20〜30%にも及ぶバイナリサイズの削減が[報告されています](http://dave.cheney.net/2016/04/02/go-1-7-toolchain-improvements)。

ガベージコレクタの高速化と標準ライブラリでの最適化により、プログラムは多少速く動作するようになるはずです。
アイドル状態のゴルーチンを多数抱えるプログラムでは、Go 1.6と比べてガベージコレクションの一時停止時間が大幅に短くなります。

ここ数年、[golang.org/x/net/context](https://godoc.org/golang.org/x/net/context/)パッケージは多くのGoアプリケーションにとって欠かせないものであることが証明されてきました。
コンテキストは、ネットワーキング、インフラストラクチャ、マイクロサービスに関連するアプリケーション
（[Kubernetes](http://kubernetes.io/)や[Docker](https://www.docker.com/)など）で大いに役立っています。
キャンセルやタイムアウトの実現、リクエストスコープのデータの受け渡しが簡単になります。
標準ライブラリの中でコンテキストを利用できるようにし、その利用をより広く促進するため、
このパッケージは[x/net](https://godoc.org/golang.org/x/net/context/)リポジトリから標準ライブラリへ移動し、
[context](https://go.dev/pkg/context/)パッケージとなりました。
[net](https://go.dev/pkg/net/)、[net/http](https://go.dev/pkg/net/http/)、[os/exec](https://go.dev/pkg/os/exec/)の各パッケージにコンテキストのサポートが追加されています。
コンテキストについての詳細は、[パッケージドキュメント](https://go.dev/pkg/context)およびGoのブログ記事
[「Goの並行パターン：コンテキスト」](../context/)（原題：[_Go Concurrency Patterns: Context_](https://go.dev/blog/context)）を参照してください。

Go 1.5では、環境変数`GO15VENDOREXPERIMENT`によって有効化される[「vendor」ディレクトリ](https://go.dev/cmd/go/#hdr-Vendor_Directories)の実験的サポートが導入されました。
Go 1.6ではこの挙動がデフォルトで有効化されました。
Go 1.7ではこのスイッチが削除され、「vendor」の挙動は常に有効になっています。

Go 1.7にはこの他にも数多くの追加、改善、修正が含まれています。
変更点の全容や、ここまでで触れたポイントの詳細については、[Go 1.7のリリースノート](https://go.dev/doc/go1.7.html)を確認してください。

最後に、Goチームはこのリリースに貢献してくれたすべての人々に感謝したいと思います。
今回のリリースには170人が貢献し、そのうち140人はGoコミュニティからの貢献者です。
これらの貢献は、コンパイラやリンカへの変更から、標準ライブラリ、ドキュメント、コードレビューにまで及んでいます。
私たちは貢献を歓迎します。参加したい方は[コントリビューションガイドライン](https://go.dev/doc/contribute.html)を確認してください。

By Chris Broadfoot

