Paper2 Blog

ともに、かける

実用Go言語

当書籍ではGoを開発業務で使っていくための基礎的な内容が丁寧に説明されています。Goの標準ライブラリだけではなく便利な外部ライブラリも紹介しつつ、クラウド環境でのGoアプリケーション開発で役立つ実用的な内容を網羅的に学べます。他言語の経験者でも「Goらしく」書けるようになることを重視しており、サードパーティライブラリやチーム作業を円滑にするための方法なども解説しています。また文法だけではなく、実践的な視点からの指導が含まれています。今後Goを開発業務で利用したい中級者に大変おすすめの書籍です!!

私の以下3つのおすすめポイントを紹介していきます。

  1. 「Goらしさ」をわかりやすく説明している
  2. 開発で役立つ実用的な内容を網羅的に学べる
  3. 動かし方だけではなく、使う上での考え方なども説明している

「Goらしさ」をわかりやすく説明している

実践的な内容と共に「Goらしさ」を学べる点はとても良かったです。複数の言語への言及がありますが、メインではJavaとの比較が多かった印象です。Javaの経験がある方はより理解がしやすいと思います。言語を使いこなす上ではイディオム、時には現状辛いところなどの理解が重要になると思います。これらは量をこなさないと把握できないため、最初からピンポイントで学べるのは非常に大きな利点だと思います。いくつか例として引用してみます。

Goで構造体を宣言し、レシーバーを定義していくことが使い勝手の良いコードへの第一歩です。
シンプルなインタフェースを使うAPIをコアとして作り、それをラップして使いやすいAPIを別に提供するのが、標準ライブラリを含めGoで広く行われている設計手法です。
GoのテストはTable Driven Test(以下、TDT)と呼ばれる形式で実装されることが大半です。

開発で役立つ実用的な内容を網羅的に学べる

網羅的に基礎を学べたのはとても良かったです。例えば「Goらしさ」の説明(1章)から始まり、構造体(3章)などでGo言語の特徴的な構造体の考えや使い方も丁寧に説明しています。開発には欠かせないテスト(13章)やリレーショナルデータベースの利用(9章)だけでなく、開発環境構築(7章)まで紹介されています。また実運用には欠かせないエラーハンドリング(5章)や、ログとオブザーバビリティ(12章)もしっかりと説明されています。一部を挙げましたが、経験豊富な筆者陣が網羅性を意識して記載してくださったことをとても感じる内容になっていました。

動かし方だけではなく、使う上での考え方なども説明している

設計がないただ動くだけのコードは量が増えるにつれて保守性が悪くなりビジネスの足枷となります。また、想定通りの使い方をしないと予期せぬ問題に遭遇することもあります。そのため、どう動かすかだけでなくどのような考え(設計)のもと動かすのかが重要です。当書籍では設計に必要な情報を説明するだけでなく、難しいポイントでは一定のガイドラインも示してくれます。Go初心者が実用的なコードを書いていく上で大変参考になるでしょう。

例えば私はcontext.Context型はキャンセル処理を実現するもの・とりあえずプログラム全体で共有したいものを入れるやつくらいの理解しかまだできていなかったです。それに対して以下の説明でより深い理解をした上での活用が可能になりました。

このコンテキストには、次の2つの役割があります。今回紹介するのは前者です。
- 1セッションから派生するすべての処理をまとめてキャンセルする(タイムアウトでの終了も含む)
- 1セッションの中で共有される情報を保持する
コンテキストには入れようと思えば何でも入れられますが、あくまでもメインの処理ではない副次的な情報を格納する目的に限定しましょう。また、コンテキストは長時間扱うものではなく、セッションのように、ある程度の寿命を持った処理を扱うための補助的なデータ構造でしかありません。セッションの寿命よりも長い、たとえばアプリケーションが実行されているあいだ残り続けるような情報を保持するのは良くない設計です。

1セッションを意識すると、無駄な情報伝搬を防げます。このような本質的な考え方がしっかりと示されているのも当書籍のおすすめポイントです。

おわりに

Goの開発業務に携わりたい人にとてもおすすめです。私自身も大変勉強になり、業務でGoを使い始めてからも師匠と基礎的な会話ができています。ぜひ、皆さんもGoの開発業務に役立ててください。

(参考)私のレベル感

どのレベル感の私にとってとても有用だったのかがわかるように参考までに私のレベル感を説明しておきます。私は「A Tour of Go」で学習を始め、PaizaでAランクを取るために1~2ヶ月Goを休日に書いてたくらいです。情報工学科でプログラミングの基礎をJavaC言語で学びましたがインフラ周りを専門としていたためWebアプリケーション開発の実務経験はほぼないです。主な対象読者として「Javaなど他のプログラミング言語を多少かじったことがある入社数年程度のプログラマー(後輩)」を想定していると書かれていたのでもしかしたら満たせてないかも?くらいの感じでした笑 それもあってか、実践的なことを含め学習量が多く大変勉強になりました。実際に最近業務で使い始めていますが、同僚からの指摘はすんなり理解できますし、基礎的な会話は可能になるレベルにはなれていると思います。