Go1.9rc1がリリースされました! そこで、Go1.9のリリースノートをさらっと見てみようと思います。 (まだrc1なので、今後変更される場合があります。ご注意を)
全部見ていくと、結構な量になりそうなので、すぐに影響のありそうな部分だけ、軽く見ていきましょう。
type alias
Go1.9ではType Aliasというものが導入されます。 これはその名の通り、型に別名をつけられるというもの。 言葉で説明するより、コードを見た方が早いと思いますので、コードを用意しました。
| |
go1.8以前ではsyntax errorになるこのコードですが、go1.9では正常に動作し、以下のような出力をします。
| |
tはT1型であり、Call2()が定義されているのはT2型ですが、T1型とT2型は同じものと見なされるので、T1型であるtからCall2()を呼び出すことができます。(ややこしい)
この、Type Aliasが導入される背景などを説明した提案はproposa/18130-type-alias.md
にあります。
ここで注意が必要なのは、C言語のtypedefのように、
| |
のようにすることはできないので注意が必要です(実際には上のコード自体は動作しますが、この型名を使おうとすると上手くいかないことが多いので、使用しない方が良いでしょう)
Vendor matching with ./…
以前より、./...とすることで、カレントディレクトリ以下を再帰的に探索してテストなどを行うことができました。
しかしここで問題となるのが、vendorディレクトリ内のパッケージで、テストの際はここを避けたい、といった要望も多かったようです。
実際、glide等ではglide nvコマンドなどにより、vendorディレクトリ以外を列挙するようなことができるようになっていました。
1.9からは、./...にはvendorディレクトリが含まれなくなりました。
go test -list
go testコマンドに-listフラグが追加されました。これは、引数として正規表現を与えることで、マッチするテストやベンチマークを(テストを実行せずに)列挙することができるオプションです。
Transparent Monotonic Time support
timeパッケージがモノトニック時刻をサポートするようになりました。
New bit manipulation package
math/bitsパッケージが新たに追加されました。
bitをカウントしたり、操作したりする関数群が含まれています。
Test Helper Functions
testingパッケージに、(*T).Helper()および(*B).Helper()が追加されました。
これは、呼び出された関数をヘルパー関数だとマークし、テストコードやその行数を出力するような場合にヘルパー関数をスキップする様になります。
そのほか、標準パッケージの変更
crypto/rand
Linux環境で、getrandomが十分なランダム性を用意できない場合、ブロックするようになりました。
もしブロックされた場合、goは/dev/urandomから乱数を取得します。
database/sql
database/sqlパッケージでは、Tx.Stmt()が呼ばれた際、キャッシュされたStmtオブジェクトがあればそれを利用するようになりました。
その他
実際には、もっと多くの変更があります。 詳しく知りたいかたはrelease note をご覧になって下さい!!!
