2016年5月5日木曜日

書籍「スターティングGo言語」

2016年4月に発売された「スターティングGo言語」を一読しました。

最新のGo 1.6に対応しており、他の開発言語でプログラミング経験のある方がこれからGo言語を学ぶ際に適した入門書だと思います。

最後まで読み進めると、例えばインターネットから取得したテキストファイルを取り扱ったり加工したりするといった、コマンドラインツールを作成できるまでの内容を習得できます。

著者の松尾愛賀さんにて、しっかりと準備や下調べを行って自信を持って執筆されている印象を受けました。

ちなみに松尾さんは4/23(土)に東京で開催された「Go Conference 2016 Spring」にてお見受け致しました。移動の新幹線の中で読もうと本書を持参していたので、あわよくばサインでも頂ければ!?と思っていたのはナイショの話です(^^;)

以下、私の個人的な所感を徒然なるままに。ご参考までにm(__)m

良かった点


通常の学習では気にしない&ならないような部分までコーディングして動作を検証されていました。私自身も「こういうものなのだろう」と流して学習していた部分を回収できたところがあったので良かったです。

 例)ポインターのポインターを操作するためのポインター:***int

前半の文法に関する章では、本質的な表記だと冗長化したり理解に時間がかかるが、一先ず学習するであろうものはシンプルに表現されていることを体験できます。(Go言語のポリシーのひとつである「Simplicity is Complicated」ですね!q@w@p)

後半にはgoコマンドや標準パッケージに関する解説があり、本書の前半や「A Tour of Go」などで一通り文法を学んだ後、次に何ができるか?何をやろうか?となった際などに活用できます。

悪かった点


ページ数の制限もあるのだと思いますが、コード例の多くが一部を抜き出したものであり、例えば変数の定義が前出のコード例に中にあったりするなど、読み解きづらい箇所があります。

ダウンロードできるサンプルコードは、紙面のすべてのコードを網羅したりgo runで実行できる形式にするなど「本書でのコードの正しい姿」として収録しておいた方が良かったです。

見つけた正誤表


98ページの下から6行目のコード内

 戻り値の( )が省略されていない。

  誤:func div(a, b int) (int, int) // コンパイルエラー
  正:func div(a, b int) int, int // コンパイルエラー

225ページのコード内の上から14行目

 MyStringではなくStrings

  誤:/* []stringへのエイリアスMyString */
  正:/* []stringへのエイリアスStrings */

私なりの補足


58ページの「暗黙的な定義」に追加

 定義されている変数(a)に対して暗黙的な定義を行うとコンパイルエラーになりますが、

  var a int
  a := 1 // コンパイルエラー

 定義されていない変数(b)が含まれていれば、暗黙的な定義を行うことができます。

  var a int
  a, b := 1, 2 // bは定義されていないため暗黙的な定義ができる

97ページの下から2行目のreturnはなくてもよいのでは?

 Go 1.1から、関数の最後の文が構文的に終端ステートメントである場合は最後のreturn文は省略できるようになっています。(https://golang.org/doc/go1.1#return

121ページの下から4行目の「どのような局面で役に立つのか?」

 同名のパッケージをimportする時に役立ちます。

 import (
         "text/template"
         htmplt "html/template"
 )

P.S.付録は読んでいないのですが上田さんがレビューされているので大丈夫でしょう!q@w@p

2016.05.19 出版社に報告して正誤表になりました。