Go言語入門オススメ書籍4選!実際に購入した書籍のみ紹介・レビュー

最終更新日

Googleにより2009年頃に設計されたプログラミング言語「Go」(通称:Go言語・Golang)は登場からおよそ10年が経過し、より成熟度が増したことに加え、昨今のマイクロサービス化によりさらに注目度が高くなってきています。

筆者も実際の開発現場で様々なLL系言語を触ってきていますが、個人的な趣味で触れた「Go」が一番のお気に入りです。

Goは筆者のように動的型付け言語(JavaScript, Python, Ruby, PHP, Perl, ... etc)を主戦場にしてきたエンジニアからも、静的型付け言語からきたエンジニアからも気に入られる場合が多い印象です。

巷で挙げられる理由は様々ですが、個人的には以下のような点で気に入っています。

1. 基本的な学習方針

ある程度開発経験を積んでいたり、一つのプログラミング言語に精通していれば新しい言語を学ぶコストはそこまで高くないでしょう。

各言語は「基本的なデータ構造や制御構文はどの言語も同じで、一部だけそれぞれの言語の特徴を表した違いが見られる程度」と感じていれば、Goの習得も難しくありません。

またこのレベルに達している方であれば、基本的には何かを実装しながら、必要な周辺知識を調べていくことで勉強していくことが一番の上達の近道だと思います。

筆者自身は自分で思いついたツールをCLIでさくっと実装してみることで、Goの書き方から並行処理まで色々と習得していきました。

今回紹介する書籍は、それらの過程で理解を深める上で非常に役立ったものばかりです。Go学習者がピンポイントで必要とする知識を埋めてくれる良書ばかりですので、ぜひ参考にしてみてください。

2. スターティングGo言語 (翔泳社)

2016年に出版された本で若干内容が古い箇所もありますが、Goの基本を全て網羅した書籍です。

Goの基礎的な文法をハンズオン形式で学ぶことができる公式チュートリアル(A Tour of Go)を全て終えれば一通りの知識を習得することが可能です。

しかし、感覚でコーディングをしていると必ずどこかで躓きます。

この書籍では、Go言語特有のデータ型から標準パッケージの使い方など、意外と調べるとまとまった情報が得られにくい基礎知識を体系的に網羅しています。

意外と他のサイトでは初級レベルと位置付けられがちな書籍ですが、その内容はプログラミングを根本的に理解していないと理解が難しい部分もあるはずです。

Go初心者用の読み物というよりは、他言語に精通したエンジニアのGo辞典という位置付けで捉えるべき書籍という印象です。

筆者自身もGoである程度実装できるようになってからこの本に立ち返ることで、より深くGoの基礎を学ぶのに非常に役立っています。

3. 現場で使える実践テクニック・改訂2版みんなのGo言語 (技術評論社)

2019年8月に新しく改訂された本書は「スターティングGo言語」と比べると、より実践的な内容に焦点を当てた書籍です。

Goは良くも悪くもコミュニティ内で定められた公式ルール慣習が多く存在します。(筆者はチーム開発において、コードの書き方が多様化することを嫌っているためコミュニティ内で統一された慣習には好感を抱いています。)

Go初心者はそれらのルールや慣習を一つずつ消化していかなければいけませんが、この書籍では、「実際にプロダクションコードをリリースするレベルで最低限念頭に入れておくべきこと」を効率良く学ぶことができました。

筆者が参考になったポイントは以下の内容です。

各章でそれぞれ異なる著者が執筆を担当しており、各エンジニアの実際の現場で遭遇したことに対するベストプラクティスがまとまっており、痒い所に手が届いた非常に参考になる一冊です。

4. Go言語による並行処理 (オライリー)

Goが注目された理由の一つは、OSのスレッドと比べて非常に軽量なスレッド「goroutine」により、手軽に並行処理を実装できる点です。

しかし、並行処理は慣れていないエンジニアが実装すると様々なバグを引き起こす原因になります。

デッドロックやライブロックの回避や同期の取り方、スレッドセーフな書き方など並行処理を実装する際に考慮すべきことを、概念からしっかりと書かれています。

また、それらを踏まえた上で「goroutine」を使った実践的な並行処理の書き方とその解説、さらにGoのランタイムにおける「goroutine」の制御の仕組みまで示されています。

Goの実装に慣れて、本格的にパフォーマンスクリティカルなアプリケーションやマイクロサービスにおけるAPI実装を考えている方に是非オススメの一冊です。

5. Goならわかるシステムプログラミング (ラムダノート)

web系のエンジニアはweb開発を専門とするため、生産性の高さからスクリプト系のプログラミング言語を扱うことが多いと思います。

しかし、それらの言語がC/C++で実装されていることをしっかりと認識しているエンジニアはどれほどでしょうか?

プログラムを実行するにはOSの機能を呼び出す必要があります。

OSの機能にはメモリ・CPU時間・ストレージなどの資源管理とファイル読み書きやプロセス間通信などの外部入出力が含まれており、Python・Ruby・PHPなどの言語はこれらの機能をC言語を介して利用しているのです。

これらのOSが提供する機能を利用したプログラミングを「システムプログラミング」と呼びます。

GoではこれらのOS機能を直接扱うことができ、それらを標準パッケージとして開発者に提供しています。本書では標準パッケージを通して、開発者が普段扱っている抽象化されたAPIの内部的な仕組みを詳細に解説しています。

Goの開発に関して役に立つ情報というよりは、Goを通してプログラミング言語がOS上でどのように動作しているかに焦点を当てた書籍ですので、Goそのものを勉強したいと考えている方にはお勧めできません。

一方、普段から低レイヤーのライブラリ開発に携わっていたり、OSレベルでパフォーマンスチューニングを要するシステムに関わっている開発者には必見の書籍です。