わくわく計算ライフ

ドムプラをキメつづけるブログになりつつある。

【書籍レビュー】たった1日で基本が身に付く! Go言語 超入門

Goを書かないにしても読めた方がよさそうだなということで入門書を買ってみました。

超入門ということで触りの触りだけということでしたが、それを考慮しても辛いかなという印象でした。

1. 基本情報

項目 内容 説明
出版社 技術評論社 技術書では安定の有名どころ。
初刷日時 2020/11/11 今回は電子版を購入したため現在の刷数は不明。
ページ数 224 フォントも大きめで全体的に軽い。

2. 購入動機

バックエンド向けアルゴリズムおじなんですが、Webアプリ等との連携は昨今では避けられないため、軽く触っておくかというがメインです。

  • Web界隈で良く使われているGoについて知りたかった
  • 短期で概要を掴めれば良いかなという考えで「1日で」というワードに反応した。

3. 書籍概要

詳細は出版社のページ等で確認いただくとして概要まで。
分量的には慣れている方なら2時間程度で読める内容にまとまっており、本当に最低限に絞られている印象を受けました。

3.1. Goの文法解説

短いサンプルコードを追っていく形でGoの基本的な書き方を解説しています。
とりあえずの書き方は最低限度分かる範囲です。

3.2. Goの周辺機能の解説

かなり絞ってはいますが、パッケージを導入しての簡易な画像処理とWebサーバの実装について解説されています。
かなり簡易過ぎるのでこれらを改造して初心者がちょっとやりたいことをやれるかというと厳しいかなと思います。

4. 本書の問題点

お前がターゲット層じゃ無いだけでは?というのはあるかもしれませんが、それを差し引いても問題が感じられたので解説させていただきます。
個人的にはかなり多く問題点を感じましたが、長くなりすぎるので一部を抜粋してお伝えしようと思います。

4.1. コード内にコメントが全くない

本書のソースコードにはコメントが全くありません(頒布しているサンプルコード内も)。真にゼロです。
コメントを書かないで短くするという方針なら特に問題が無いのですが、書籍内では行の後ろにほぼコメントの様な説明書きがついており、それならばコメントで書けば良いのでは?と感じました。
また、本書を通してコメントの書き方の説明はまったくありませんでした。

4.2. 説明が場当たり的・逐次的過ぎる

本書の解説は、サンプルを材料としてGoの書き方や特徴を説明する、という形式ではありません。
著者が説明したい項目を含むサンプルソースがまず提示され、そのサンプルコードについての解説がされるという形で進んでいます。
あくまで、サンプルコードが主役なので、一緒に解説した方が良い機能もサンプルコードに登場しない限りは解説がされません。
例えば、配列の初期化の例ではGoでは1行で各パターンと複数行で各パターンがありますが

(1行で書くパターン)

func main() {
    values := []int{1, 2, 3}
    for i := 0; i < len(values); i++ {
        fmt.Println(i)
    }
}

(複数行で書くパターン)

func main() {
    values := []int{
        1,
        2,
        3,
    }
    for i := 0; i < len(values); i++ {
        fmt.Println(i)
    }
}

複数行で書く場合は各行の式の末尾には最後の要素でも,を記載する必要があります。
この説明、1か所で書いておけば後で書き方を見直すにも便利だと思うのですが、後者の書き方は書籍の大分後の方で、複数行に分けて記載するサンプルが出たときに初めて説明が行われておりかなり離れていました。
サンプルコードを理解するにはその周辺だけを読めば良い構造は一見楽なのですが、レアなTips以外をバラバラに配置してしまうと後で振り返る際に、迷子になるのではないかと感じました。
例えば、上記の例では初心者がどこかで見た複数行に渡って配列を初期化する例をまねした時に最後の項目に,をつけ忘れてエラーになった場合、本書を振り返って配列の章をみてもそこに解答を見つけることができず詰まることが予測されます。

4.3. 関数定義を参照していない

既存パッケージの関数を呼び出す際に、一貫して関数定義を参照した説明をしていません。
例えばstrconv.FormatFloat()の説明ではサンプルコードを元に以下の様な説明がされています。

bstr = strconv.Format(b, 'f', 2, 64)

このようなソースに対して

  • bは文字にしたい数値の変数
  • fは書式"でなく'で囲う
  • 2は小数点以下の桁数
  • float32かfloat64か

といった説明です。
ソースコードの流れから明示的なのはbがfloatであることと。
2, 64は直値なので整数なのかなということは分かると思います。
'f'に関してはこの説明が出たところでは特に説明が無く"f"では無いとだけの説明です。

これではなぜ"f"では無く'f'なのかが分かりません。
ちなみにbyte型の値の表記で'で囲うのですが、何とbyte型の説明は上記の箇所より後の章で出てきます。

pkg.go.dev

これはさすがにFormatFloatの関数定義を引用した上で、3番目の引数fmtはbyteなので~という形で書き方を説明して欲しかったと思います。
そうでないと「へーなんだかわからないけどそう書くんだー」だけで終わって、そこから先の調べ方が分からないと思います。

4.3. 巻末のINDEXが虚無

巻末のINDEXですが、たとえばAのところには

Array assert関数

みたいに書かれています。
初出のページ数や解説のページ数がかかれているわけでもなく、単純に辞書順に本書に出てきた用語が並べられているだけなので何の情報もありません。
良いのか…コレ…索引の意味ねぇぞ…

5. どのような人にオススメ?

総括すると、価格も別段安いわけでもないので余りお勧めできません。
ある程度プログラミング経験が合って、とりあえず短時間でGoの触りを理解するというのには使えなくも無い程度。
プログラミング初心者が第1言語でいきなり本書を読むとそこから先に進めず迷子になりそうなので、本来のターゲット層に対して特に厳しいと感じました。