Go 1.14 リリース候補版
Go 1.14 のリリース候補版が出た。 これに伴ってリリースノートのドラフト版も更新されたようだ。
- Go 1.14 Release Candidate 1 is released - Google group
- Go 1.14 Release Notes - The Go Programming Language
更にブログでは以下の記事で 1.15 についても言及されている。
詳しくはそれぞれの記事を読んでもらうとして,この記事では個人的に気になった点をかいつまんで紹介する。
Try 終了のお知らせ
「Go 1.13 と 1.14」で紹介した try()
組み込み関数の導入は見送られたらしい。
というわけで,エラー・ハンドリング周りはこれ以上の仕様追加・変更は(1.x の間は)なさそうである。
埋め込み Interface の改善
Go 1.14 では埋め込み interface の仕様が一部変更になる。
Go では interface は振る舞いのみを定義する型だが,入れ子にすることができる。 こんな感じ。
type Person interface {
Name() string
Age() int
}
type Employee interface {
Person
Level() int
String() string
}
この例では Employee
interface 型に Person
interface 型が埋め込まれている。
つまり Employee
型では Name()
, Age()
, Level()
, String()
各メソッドを要求しているわけだ。
ここで Person
型に String()
メソッドを付けることを考える。
type Person interface {
Name() string
Age() int
String() string
}
修正された Person
型を使って Employee
型を定義しようとしても
とコンパイルエラーになる。
Interface 型の間で定義するメソッドを調整すればいいのだが,他パッケージの interface 型を埋め込む場合は,そのパッケージの仕様変更の影響をモロに受けることになる。duplicate method String
更に
のようなひし形構造になっている場合はより複雑になる。
Go 1.14 では(関数型の同一性も含めて)同じメソッドについては重複を許容する。 上述のコード例でもコンパイル・エラーにならないわけだ。
ただし
type E1 interface{ M(x int) bool }
type E2 interface{ M(x float32) bool }
type I interface {
E1
E2
}
では(メソッド M()
の型が同一ではないので)相変わらずコンパイル・エラーになるようだ。
Preemptive なスケジューリング
これは Shimane.go の Slack で教えてもらったのだが, Go 1.14 では preemptive (非協調的) なスケジューリング実装になるようだ。
もともと Go 言語には,ランタイムによって並列処理の実装詳細を隠蔽することにより,コード記述としての平行処理に注力できるというメリットがあるが preemptive なスケジューリングによって強化されることになる。
ただし全てのプラットフォームで有効になるのではなく
windows/arm
darwin/arm
js/wasm
plan9/*
は例外となるらしい。 WebAssembly や Plan 9 が non-preemptive になるのは分かるが, ARM アーキテクチャって実装が難しいのか?
モジュール対応モード
モジュール対応モード(module-aware mode)も色々と機能追加されるようだ。
特に vendor
ディレクトリとの組み合わせは色々とできそうだ。
この辺は Go 1.14 正式版がリリースされてから試してみよう。
Launched pkg.go.dev
pkg.go.dev は従来の godoc.org から置き換えることができる。
実際に2020年後半には godoc.org へのリクエストを pkg.go.dev にリダイレクトする計画があるらしい。
標準パッケージもサードパーティのパッケージも同等に扱えるので,今後は pkg.go.dev を参照するのがいいかもしれない。
参考図書
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。
- Go言語による並行処理
- Katherine Cox-Buday (著), 山口 能迪 (翻訳)
- オライリージャパン 2018-10-26
- 単行本(ソフトカバー)
- 4873118468 (ASIN), 9784873118468 (EAN), 4873118468 (ISBN)
- 評価
- Goならわかるシステムプログラミング
- 渋川 よしき (著), ごっちん (イラスト)
- ラムダノート 2017-10-23
- 単行本(ソフトカバー)
- 4908686033 (ASIN), 9784908686030 (EAN), 4908686033 (ISBN)
- 評価
PDF 版あり。ファイルやソケットなどに代表される順次アクセスの汎化である io.Reader / io.Writer およびその派生・特化クラス,またプロセスやスレッドに関する解説が秀逸だと思う。さらに Docker コアの libcontainer についても解説がある。