『プログラミング言語 Go』を眺める

no extension

Go 言語のよいところのひとつはドキュメントが分かりやすい形で提供されている点である。 はじめて Go 言語に接する人なら “A Tour of Go” から気楽に始められるし,手元にコンパイラがなくてもとりあえず “Playground” で遊ぶことはできる。 更に言語仕様標準パッケージのドキュメントFAQ といったものはもちろん, “Effective Go” みたいなドキュメントも用意されている。 なので実際のところ,本を買わなくてもオンラインで充分学ぶことができる。

にも関わらず今回この本を買った理由は以下の2つ。

  1. オフラインで参照できる完全なリファレンス本が欲しかった
  2. 知識体系として Go 言語を学べる教科書が欲しかった

実は現在,職場が某セキュリティ・エリアの中にあってネットから物理的に切り離された環境にいる。 以前は分からないことは Google 先生に訊けたのに,それが出来なくなってしまったのだ。 スマホやタブレットといった電子機器も持ち込めないので「Kindle で」というわけにもいかない。 今ほど紙の本のありがたみを実感できたことはないよ。

まぁそういう経験をしてしまったので(仕事に絡みそうなものであれば)紙の本はちゃんと買っておくか,という気になったのだった。 逆に紙の本を買ってしまったので(今までみたいな余暇の遊びじゃなく)元を取らないとダメだなぁ,などと思ったり。

さて本題。

まず, Go 言語を全くはじめて習うという方は,『プログラミング言語 Go』からはじめるのではなく, “A Tour of Go” (日本語版もある)からはじめることを強くおすすめする。 “A Tour of Go” では手を動かしながら学べるので「感触」を掴むのにちょうどよい教材と言える。 そうした後に『プログラミング言語 Go』を読み進めれば理解しやすいと思う。

Go 言語をある程度使える(私程度のレベル)という方は第7章から第9章までを重点的に読むといい。 Interface, goroutine, channel の概念や実装方法は Go 言語の中核技術といえるもので,ここを押さえておけばかなり使いこなせるようになるはず。 また第12章以降に登場する refrection や unsafe パッケージの説明は個人的にかなり分かりやすかった。

第8章および第9章を読んでいて気がついたのだが, goroutine/channel を使った CSP (Communicating Sequential Processes) の真価は data driven な設計で真価を発揮するのではないだろうか。 「並行プログラミング」を意識するとどうしてもスレッドを連想してしまうけど,スレッドよりも遥かに軽量な goroutine はもっと無茶ができるはず。 たとえば多数の goroutine をネットワーク化した非ノイマン型っぽい「何か」とか。

参考

photo
プログラミング言語Go
アラン・ドノバン (著), ブライアン・カーニハン (著), 柴田芳樹 (著)
丸善出版 2016-06-20 (Release 2021-07-13)
Kindle版
B099928SJD (ASIN)
評価     

Kindle 版出た! 一部内容が古びてしまったが,この本は Go 言語の教科書と言ってもいいだろう。感想はこちら

reviewed by Spiegel on 2021-05-22 (powered by PA-APIv5)