2016年7月10日日曜日

書籍「Go言語入門」

2016年6月に発売された「Go言語入門」を一読しました。

本書籍はGo 1.6対応と「Raspberry Pi」を使った組み込みプログラミングを謳っています。私は「Raspberry Pi」を所有していないため本書の最後の約1/4は更なる流し読みとなりました(T_T) ラズパイを入手するようなことがあれば読み直したいところです。

以下、初回の読み進めでの私の読書感想文です。

良かった点

パッケージ(goファイルの構成)について解説されている

第2章でパッケージ(goファイルの構成)について解説されています。internalやvendorの話もあり、作成するgoファイルの構成に疑問や迷いを持たれている方には役立つ内容です。

CLIツール以外の作成についての話がある

学習した内容を確認するためのコードがWebアプリケーション作成になっています。第16章では Google App Engine(GAE)について解説されているため、作成したWebアプリケーションをGAEにデプロイするといった応用学習も期待できます。

その他に共有ライブラリーやモバイルアプリケーション(gomobile)の作成についても紹介されています。

メモリ上で云々の話がある

Goはガーベジコレクション搭載ということで(?)意外にも他のGoの日本語の入門書ではメモリ上で云々の解説や図が少ないです。unsafeパッケージに関する記述もあったりするなど、メモリ上での姿も意識できるようになっています。(実行効率の良いプログラムを書くためには必要不可欠ですよね:q@w@p)

「そんなところ」も解説されている

その他、OSやアーキテクチャーに依存したソースコードの書き方やビルドの制約や、名前のある型ない型を意識させるなど、かゆいところに手が届いた解説も多く見受けられました。

悪かった点

急にWebアプリケーション作成の話が登場する

各章にて文法や機能の解説を読み進めた後、いきなりWebアプリケーションを作成して確認をとる話になるので戸惑ったり違和感を覚えたりします。個人的には第16章のGAEの前に別途「第xx章 Webアプリケーション」と章立てをして解説した方がわかりやすいと思います。

6.3.5 「rangeを用いたfor文」の解説が不十分?

「range対象がチャネル型の時だけ変数が1つ」といった解説がなされていますが、チャネル型以外でも変数を1つだけ指定した記述が可能であり、この場合は「1つ目の値」を取得します。

    str := "abc"
    for i := range str {
        fmt.Println(i)
    }
    // 結果:インデックスを取得
    // 0
    // 1
    // 2

読み進めると「11.1.7 配列とスライスのfor文」のコード中にrange対象がスライス型の時に変数を1つだけ指定した記述した文が出てきたので「6.3.5できちんと解説しておけば良いのに」と少し残念に思いました。

意外だった点

CLIツールの作成についての解説がない

os.Argsやflagパッケージなどコマンドラインツールの作成に関する解説はなく、その代わりをWebアプリケーションの作成で対応しているところは意外でした。

「Raspberry Pi」を持っていなくても大丈夫

「Raspberry Pi」の章ですが、解説に使用されているソースコードの中には組み込みに依存せずGoの標準パッケージだけで作成されているものもあります。「Raspberry Pi」を所有していなかったりあまり興味がない方でも一度はざっくりと目を通してみると役立つ情報が見つかるかもしれませんよ。(インターネットから情報を取得するコード、など)