『Go ならわかるシステムプログラミング』を眺める

no extension

Go 言語の言語仕様について勉強するなら真っ先に『プログラミング言語 Go』を推すが,もう少し実装よりの話であれば『Go ならわかるシステムプログラミング』を推す。 特に Go 言語でシステム寄りのプログラミングを行うのであれば,是非とも目を通しておくべきだろう。

この本は ASCII.jp で連載されていた「Goならわかるシステムプログラミング」を書籍用に再構成したものらしい。 なので,まずは Web サイトの方を見て紙の本で買うべきか判断するのがいいと思う。

Go 言語の特徴のひとつがクロス・コンパイルの容易さである。 いくつか制約はあるが,基本的には同じコードで Windows も UNIX 系プラットフォームも対応していて,これを実現するために標準の syscallruntime パッケージ周辺を巧妙にカプセル化している。 しかもこれらのソースコードが公開されているため1 システム・プログラミングの学習教材としても使える2

特に『Go ならわかるシステムプログラミング』では,ファイルやソケットなどに代表される順次アクセスの汎化である io.Reader / io.Writer およびその派生・特化クラス,またプロセスやスレッドに関する解説が秀逸だと思う。 さらに Docker コアの libcontainer についても解説があったりする(自前で libcontainer を直に触る人はあまりいないかも知れないが)。

個人的によく出来てると思うのが平行(concurrent)/並列(parallel)処理について解説している13章と14章だ。 プロセスやスレッド(更にはガベージコレクション)と goroutine の関係について日本語で分かりやすく解説している本は少ないと思うので,これだけで『Go ならわかるシステムプログラミング』を買っておく価値があると思う3

goroutine と channel の組み合わせは並行処理におけるパラダイムシフトとなる可能性がある。 それくらい高いポテンシャルを持っているのだ。 そのための基礎学習を『Go ならわかるシステムプログラミング』でやっておくのがいいんじゃないかな。

ブックマーク

参考図書

Goならわかるシステムプログラミング
Goならわかるシステムプログラミング
渋川 よしき
ラムダノート
評価 

ァイルやソケットなどに代表される順次アクセスの汎化である io.Reader / io.Writer およびその派生・特化クラス,またプロセスやスレッドに関する解説が秀逸だと思う。 さらに Docker コアの libcontainer についても解説がある。

reviewed by Spiegel on 2018.10.19 (powered by Amakuri)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
Alan A.A. Donovan, Brian W. Kernighan
丸善出版
評価 

著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。

reviewed by Spiegel on 2018.10.19 (powered by Amakuri)


  1. Go 言語の標準パッケージは MIT ライセンスで公開されている。 [return]
  2. ちなみに『Go ならわかるシステムプログラミング』では,各章の最後に演習問題がある。 [return]
  3. ただし並行処理のデザインパターン等,もう少し踏み込んだ内容については『Go 言語による並行処理』のほうがいいかも知れない。 [return]