先日2017年8月24日にGo 1.9がリリースされました。 ダウンロードページ からダウンロード可能です。

最大の変更点はGo1.9rc1 is released! でもお伝えしたように、Type Alias でしょう。 型名に対して別名をつけることができる機能です。

また、そのほかにも多くの変更が加えられています。 リリースノートはこちら です。

以下では、いくつか変更点を見ていきます。

Ports

Go 1.9から新しく2つのOSと1つのプロセッサアーキテクチャがサポートされています。

POWER8

IBMのPOWER8プロセッサがサポートされています。 GOARCH=ppc64またはGOARCH=ppc64leで使用することができます。

FreeBSD

FreeBSD 9.3で動作します。。。が、すでにFreeBSDはサポート切れです。(なんでや・・・・) Go 1.10からはFreeBSD 10.3+で動作する様になる予定です。

OpenBSD 6.0

OpenBSD 6.0がサポートされました。 かわりに、Go 1.9ではOpenBSD5.9をサポートしていません。

Parallel Compilation

パッケージの関数を並列コンパイルできるようになりました。 並列コンパイルはデフォルトでONになっており、無効化するには環境変数でGO19CONCURRENTCOMPILATION0に設定します。

Vendor matching with ./…

これまで、./...というディレクトリ表現はvendorディレクトリも含んでいました。しかし、go testの場合などvendorディレクトリは含まれない方がうれしい場合も多く、実際glide nvなどでvendorディレクトリを含まないディレクトリマッチングが実装されていました。 go1.9からは./...にはvendorディレクトリが含まれないようになり、vendorディレクトリにマッチさせたい場合は./vendor/...と書く必要があります。

Moved GOROOT

Go 1.9から、GOROOTが移動となりました。 起動されたパスから自動でGOROOTを探索します。 これにより、Goのインストールパスが違う場所に移動しても、Goのツール類は継続して使える用になりました。

Compiler Toolchain

  • 複素数の割り算がC99準拠となりました。

Doc

長い引数リストは省略されます。 これはgo docで生成されるコードの可読性向上のためです。 また、構造体フィールドのドキュメンテーションがサポートされました。go doc http.Client.Jarなどでどうなったのか確認することができます。

env

go env -jsonフラグによりJSON出力することができるようになりました。

Test

go testコマンドに-listフラグが追加されました。 これに正規表現で引数を与えることで、テスト名・ベンチマーク名・Exampleテスト名を調べることができます。

Vet

vetコマンドがより強化されました。

GC

ガベージコレクションがより効率化されました。

ライブラリ

Transparent Monotonic Times

モノトニック時間がサポートされました。

math/bits

ビット操作のためのライブラリとしてmath/bitsが追加されました。

Helper method

(\*testings.T).Helperと`(*testings.B).Helperという二つのメソッドが追加されました。 ファイルや行番号を表示する際にスキップする関数を用意できます。 これにより便利なテストヘルパー関数を書いて、且つユーザに対してはわかりやすい行番号を表示することができます。

標準ライブラリ

syncパッケージにMapという構造体が追加されているほか、多くの標準ライブラリに対して細かい変更が加わっています。