msksgm’s blog

msksgm’s blog

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

「プログラミング言語Go」感想

概要

プログラミング言語 Go」を 7 章まで読みました。 7 章は「インタフェース」までです。後の章は平行処理やリフレクションといったレベルが高く難しい内容なので、一旦読むのをやめました。 「前提」「読了時間」「感想」「次に関連で勉強すること」「まとめ」を記述します。

前提

目的

主な目的は以下です。

  • 普段の業務で Go を使っているが、言語の製作者が作成した本書を読んだことがなかった
  • 会社の後輩と Go の知見を深めるための勉強会で課題図書を探していた。若干レベルが高そうだったが、2 人で読むには十分な書籍だと思った

前提知識

実務で、Go を用いたバッチ処理の保守開発をおこなっています。

学習教材については、Tour of Go を何周かしました。ただし、1.18 前なので、Generics が導入されるまえです。

Go の書籍は「Learning Go」を読みました。当時、日本語版の「初めての Go 言語」が出版されてませんでした。そのため、英語版を読んだため説明と理解について若干曖昧な部分があります。

一時期 zenn に Go で戦術的 DDD を実践する記事を書いていました。当時は Go を用いてオブジェクト指向らしく記述しようとして沼にはまっていた記憶があります。なので、Go らしい書き方はよくわかっていないです。

読了時間

1 週間に約 3 時間かけて対象範囲を読み、勉強会は 30 分程度で読み合わせをしていました。 これを、7 週間続けたので、だいたい 24.5 時間程度だったと考えています。

感想

Go の本質的な部分を触れられており、内容が古いですが現在も通じる部分について学べるため、Go エンジニアに 1 読してほしい書籍だと思いました。 理由は 3 つあります。それは、「詳細な言語仕様を学べる」「適切な言葉の使い方を知れる」「インタフェースのコアな使われ方について学べる」です。

「詳細な言語仕様を学べる」は、第 3 章基本データ型、第 4 章コンポジット型において思いました。詳細なデータの成り立ちに加えて、比較可能なことやメモリの割り当てについて知れました。どれも普段は意識することがないため、このような機会で学べてよかったです。
「適切な言葉の使い方を知れる」は、例えば「インタフェースを満たす」です。Java では「インタフェースを実装する」と読んでいたため、Go でも同じように「実装する」と言っていました。制作者側の意図や言語の振る舞いからすると、「満たす」が適切であるため、これからはそうすることにしました。
「インタフェースのコアな使われ方について学べる」で印象に残ったのは Http サーバーとエラーです。 Go は net/http パッケージで可能なため、普段から使っていましたが、ルーティング周りが非常にブラックボックスな印象でした。 本書籍を読み、本質的な部分はインタフェースと DefautServeMux によって、なりったことがわかり非常に腑に落ちました。 API サーバーを作成する際に、Echo や Gin といったフレームワークがありますが、どれも Go を薄くラップしただけなので、一度確認してほしいと思える内容でした。 また、エラーのラップについても触れられていました。Go はfmt.Errorfでラップすることがよくありますが、エラーの比較方法が値になるため個人的にはやっていません。それは「プログラミング言語 Go」が出版されたときからそうだったことを知り、いまだに型比較が全く広まっていないことを知り驚きました。

気になった点は、やはり内容が古い部分です。 Go 1.18 でジェネリクスや any が導入された他、それ以前に、エラーの比較には errors.As、errors.Is だったり、平行処理には context が存在することです。 そのため、初学者にいきなり読むよりは「初めての Go 言語」などを読み、手を動かして Go の経験を少しだけ得た後に読めると良いと思いました。
また、言語仕様が主体で、実用的な部分は対象外なので、「今すぐアプリを作成したい」といった人には向かないと思いました。

次に関連で勉強すること

次に Go 言語の本を読むとしたら、以下の順番で読もうと考えています。

  • 「実用 Go 言語」
  • 「Go 言語による並行処理」

まとめ

Go 言語の制作者が執筆した「プログラミング言語 Go」を読みました。 現在でも通じる本質的な部分を認識でき、一読してよかったと思えました。 内容が古い部分もあったり、すぐに手を動かして実践できる内容でもないので、他の書籍で補完したいと思いました。