"Go Programming Blueprints"を読んだ

October 15, 2015 - golang

Go Blueprints by Mat Ryer book cover

最近Kindleで購入したので、でひととおり読んで写経してみました。

概要と雑感

2015年1月に発売された書籍であり、Goのバージョンでいうと1.3から1.4の頃に書かれたものです。 著者はGolang UK Conference 2015でトークもしていた@matryerさん。 (Golang UK Conference 2015 - Mat Ryer - Building APIs - YouTube)

いくつかのGo製アプリケーション開発を通じて、Goの機能・パターンを学習する、という感じのもの。機能やパターンについて網羅的ではないものの、特定のユースケースをベースにしているため、パターンの理解は容易に感じます。取り扱うトピックも、web/apiサーバーとコマンドラインツールがバランスよく取り上げられています。

対象読者は「すべてのGoプログラマー」と記載がありますが、A Tour of Goをひととおりやったあとくらいがちょうど良い気がします。

リファレンス的な構成の他書やEffective Goのような公式ドキュメントのものとうまくすみ分けができているのではないかと。

ただ誤字・脱字が少し目立つかな(章ごとに1,2個程度ですが)という点が残念ではありますが、比較的わかりやすいミスなので読んでいて混乱するほどではありません。

Go Booksとしては比較的マイナーっぽく、日本語圏の情報もないので購入はちょっとしたギャンブルでしたが、ある程度まとまったストーリーとして読めるGo関連の書籍は少ない印象ですし、自分としてはちょうど良い買い物だったかなと思います。

※ソースコードもmatryer/goblueprintsに公開されています

_※当然英語ですが、さほど読みにくい感じはなかったです

構成

全8章で作成するアプリケーションのうち、1章で簡潔するものと章をまたがるものがあり、構成は以下のようになっています。

1, 2, 3: websocketによるチャットアプリケーション

  • http.Handle/HandleFuncの基本的な使い方とか、TDDによるパッケージ開発、
  • ソーシャルログイン機能の追加(OAuthはstretchr/gomniauthを利用)
  • アイコン画像のアップロード機能の追加

4: 空きドメイン検索ツール

  • Unixコマンドのように、STDIN/OUTを使った複数コマンドによる連携
    • $ 単語生成 | 単語の補正 | TLDの付与 | WHOISチェック
    • これらをos.Command.Stdin,Stdoutで束ねるコマンド
    • .o(シェルスクリプトでも良いのではと思いますが、外部プロセスとの連携の練習ということで…)

5, 6: Twitterのリアルタイムカウンター

  • 複数のプロセスで構成される分散システム
    1. twitter streaming apiから拾ったツイートをNSQに追加するプログラム
    2. NSQのsubscriberが単語別件数を集計して、1秒ごとにMongoDBを更新するプログラム
    3. MongoDBの内容を管理・閲覧ツール(RESTful APIとWEBアプリ)

トピック

  • シグナルトラップによる安全なプロセス終了処理
  • sync.Mutexによる協調動作の実装
  • stretchr/gracefulでの安全な終了処理

7: Google Places APIを使ったロケーション推薦アプリケーション

  • iotaによるEnum相当の実現
  • TDDでパッケージ開発
    • .o(ここでcheekybits/isが出てきたけど、全体で統一感出してほしい…)
  • 型アサーションによるキャスト

8 ファイル自動バックアップシステム

  • 2つのCLIツールの作成
    • backup: バックアップする対象リストの管理コマンド
    • backupd: メタデータをもとに実ファイル監視とバックアップ実行する常駐プログラム

蛇足

そういえば、カーニハン著のThe Go Programming Languageが11月発売とのこと