msksgm’s blog

msksgm’s blog

Webエンジニアです。日々の勉強記録、技術書感想、美術観賞感想を投稿します。

「Learning Go」感想

概要

Learning Go」を読みました。 前提(自身の Go の経験、読み終わるのにかかった時間)、感想、次に Go で勉強すること、を記述します。

前提

Go の経験

一応業務(バッチ処理)でも使っています。 Go で API を作成した経験は業務ではなく、個人開発で何度か作成した程度です。その際には RealWorld を参考して作成しました。 「ドメイン駆動設計入門」の記述されている戦術的 DDD の実装パターンを Go を用いて実装した記事を zenn に投稿しています(全 7 記事)。 Context、ポインタの知識が曖昧で、平行処理と Reflect はほとんどわかっていないです。

Go の書籍は「改訂 2 版みんなの Go 言語」を拾い読み、「エキスパートたちの Go 言語」の序章を読んだ程度です。 Tour of Go は何度かやっています。

読み終わるのにかかった時間

26 日間かけて読みました、1 日 2 時間読んだ日もあれば、30 分しか読んでいない日もあります。 なので、平均 1 時間ぐらいだったと考えます。

感想

オライリー・ジャパンサブスクリプションを利用しています。 Go の書籍を漁っていたところ、この書籍「Learning Go」を見つけました。 2021 年出版で日本語訳がありませんでしたが、テストとエラーのところだけをみたところ良さそうだったので、読むことにしました。

Go の Context、テスト、エラーの学習のために読みましたが、個人的には 2022 年 4 月 17 日時点で、Go の詳細な入門書としては一番ではないかと考えています。 なぜなら、Go のシンタックスを学べるだけでなく、歴史的経緯と Go の哲学の観点から解説してくれるからです。 単純な書き方だけでない、「なぜこうなったのか」という本質的な解説により、他の言語を学んだ状態だと一癖二癖あると(個人的には)感じた Go が以前よりも取っ付きやすく良い言語に感じました。 Tour of Go をなんとなく理解して、軽く API サーバーを作ったぐらいの人だと、特に得られるものが多いのではないでしょうか。 変数や型から始まるので初歩的なところから良い復習になると考えます。 また、ある程度書き慣れてきた人にも Go の本質を知れるという意味では非常におすすめできます。

個人的には、インタフェース、エラー、テストは参考になる人が多いと思いました。 具体的には以下です。

  • インタフェースの記述方法の由来(なぜimplementsを書かずに実装するのか)
  • エラーのラップと比較(errors.Iserrors.As
  • テストの書き方(スタブ、go-cmp、テーブルドリブンテスト)

これらは疑問をもったり不安だった部分が多かったので、良い学びになりました。 学んだことを活かしたくて、過去の自分のテストを書き直したくなり、実際に一部書き直しました。 また、他の書籍ではあまり触れられないジェネリクスについても書いてあるので、そういった点においても有益でした。 Context、平行処理、Reflect についても理解を深めたかったのですが、 英語を翻訳して読んでいくには内容が重く、結局読み飛ばしてしまいました。 ここらへんはもう一度時間をかけて読みたいです。

Effective Go が更新されなくなり(参考)、書籍「プログラミング言語 Go」も Go 1.8 のリリースにより、古くなってきています。 なので、割とモダンな Go の書き方を学ぶ点においても、この書籍は有効だと思いました。 ただし、この本の Go のバージョンも 1.5 なので、読むとしたら早めに読むことを推奨します。

2022 年 4 月 22 日に「実用 Go 言語」オライリー・ジャパンら出版されます。 著者は渋川よしきさんです。 渋川よしきさんは、過去にも Go の書籍(Go ならわかるシステムプログラミングRealWorldHTTP)を執筆し、どれも高い評価を受けています。 どちらも、本質を捉えた書籍となっているため、今回の Go 言語の実用書も同じように本質を捉えているのではないかと予想していて、非常に期待値が高いです。 なので、無理して「Learning Go」を読む必要はなく、「実用 Go 言語」を読んだ方がいい可能性もあります。 ただ、「実用 Go 言語」の目次に Reflect と Context がないので、互いに補完しながら読んだ方がいい説もあります。

次に Go で勉強すること

個人的な課題は Context、Reflect、平行処理、ポインタだと実感しています。 特に、Context、Reflect は実際に使う場面が多い(と考えている)ので、もう一度「Learning Go」を読み、RealWorld を実装する中で身につけようと考えています。 平行処理は「Learning Go」でも紹介されていた、「Go 言語による並行処理」で学ぼうと考えています。ポインタはあまり復習を考えていないです。いろいろ書きましたが、平行処理とポインタは優先度が低いのでしばらく手をつけない可能性が高いです。

まとめ

  • Learning Go」は Go の本質を初心者向けにもわかりやすく解説した書籍で、初学者から中級者まで非常におすすめできる書籍だった
  • Effective Go が更新されなくなり、「プログラミング言語 Go」が出版されてから時間が経ちつつあるので、新しめの書籍で学びたい人にもおすすめできる
  • ただし「実用 Go 言語」が出版されるので、それを買った方がいい可能性もある

2022/08/10 追記

日本語訳版の「初めての Go 言語 ── 他言語プログラマーのためのイディオマティック Go 実践ガイド」が 2022/9/26 に発売されます。