Go 1.9 is released


2 min read
Go 1.9 is released

先日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という構造体が追加されているほか、多くの標準ライブラリに対して細かい変更が加わっています。


docker-machineでRancherOSを使う
Previous article

docker-machineでRancherOSを使う

docker-machineとそのメリット docker-machineは仮想マシン上にDocker Engineをインストールするツールです。 docker-machineコマンドを使用することで、Dockerホストを作成・管理することが可能です。 docker-machineを使用してDockerホストを作成すると、 $ docker-machine env <MACHINE_NAME> でシェル評価可能なDocker接続情報を得ることができ、 $ eval $(docker-machine env <MACHINE_NAME>) とすることにより、そのセッション内ではあたかもローカル環境のDockerの様にコンテナを操作することが可能となります。 docker-machineで使用するOS 扨、

sync.WaitGroup
Next article

sync.WaitGroup

Goroutineを使用して複数の処理を並列で実行、すべてが終わったら次の処理に進みたいという場合があると思います。 Goroutineでデータのリストを作るという処理を考えます。 データの順番は関係なく、すべてのGoroutineでのデータがそろったら次の処理をしたいという設定です。 この場合、単純に考えると以下のようなコードになりますが、以下のコードではデータがそろう前に次の処理が行われます。 datalist := []string{} for i := 0; i < 10; i++ { go func() { // something w/datalist } } fmt.Println("


GO TOP

🎉 You've successfully subscribed to something tech.!
OK