ugo's 読書感想文

読んだ本のまとめや学んだことを書いていきます。

Go言語 プログラミングエッセンス

概要

自分は実務でのGoでの開発はほぼ皆無に等しく、

サービス的にはGoを使ってるものの、レビューすることはあれど、自分が書くということはほぼしてませんでした。

そのため、自分でもGoを書く練習をしようと思い、本書を買いました。

Goの言語的な使い方について細かく書いてあることもあり、中途半端に学んでいた自分にとっては有益な本でした。

Goの言語仕様

Goの言語的な設計や考えなどが説明されており

Goによるプログラムはもちろん、コマンドや機能、テストについても書かれています。

コマンドは特に、開発で利用できるものが多くあり、自動生成コマンドであったりパフォーマンス計測であったり、インストールのコマンドについても細かく書いてあるので、一読の価値がありました。

文法

Goの文法的なところも少し説明があります。

僕は文法は他のところで学んでいたり、別言語での経験はあるので、ある程度飛ばしつつ読みましたが、初めてプログラミング言語を触るという人は参考になるかと思います。

Goだからといって特別なことはなく、純粋に文法を学んでいくにも素直な説明なので入ってきやすいかと思います。

開発

Goを利用してCLIの開発とWebアプリケーションの開発が紹介されています。

特によく使われているフレームワークやライブラリの紹介があるのは嬉しかったです。

慣れていない人からするとどんなライブラリを使えばいいとかの勘所がないので、長いことGoに触れてきた方の紹介としてライブラリが紹介されていると心強いですね。

そして、Webフレームワークなども紹介されていますが、基本的にGoは言語としての開発力が高く、フレームワークと言ってもGo言語の拡張としてのものしかないようで、得にルーティングの部分を吸収してくれる役割が大きいようです。

そう言った点もあり、どこにどんなフレームワークが良いかといった技術選定も、各フレームワークがどういった思想や機能を兼ね備えてるかを理解するのに良かったです。

並行処理

もちろん、並行処理についても1章使っており

channelを利用した並行処理、スロットルによる並列処理の制限など

少し学ぶのに難しい部分についてもサンプルコードと一緒に書かれているのは良かったです。

サンプルコードも何百行もあるものではなく、焦点を絞った形になっているのでコードも理解しやすいです。

ただ、1行1行の処理の説明はないので、ある程度独学で学んだ人が書き方を学ぶといった形に適しているかと思いました。

一部Go言語の仕様っぽい箇所があり、なぜそう書けるのか分からず悩む箇所がありました。

それも、素直にそう書くんだと受け入れる気持ちで読めば、何度か読んでいるうちに恐らく馴染んでくるでしょう。

実際のコードは、URLを元にスクレイピングして情報を取得するなどを想定して作られているのでイメージはしやすいかと思います。

テスト

Table-Driven-Tests を元にテーブルテストを書く紹介があります。

テストライブラリがGo言語の仕様で用意されていたりするので、そちらを用いてのテストをしています。

その中でいろんなテクニックも紹介されており、テストの効率的な実行の仕方や、前処理後処理の書き方なども学ぶことができました。

またこちらも並列テストの紹介があり、テストの速度などを上げるための仕方もサンプルコードがあります。

モックを使ったテストの紹介がなかったのが、少し気がかりでしたが、学ぶことが多い章でした。

計測

ベンチマークを取る機能が言語仕様として備わってるのは結構珍しいらしく、手法を紹介されていました。

僕自身は普段はあまりベンチマークを取るということを意識してはいなかったので、少しイメージがしにくいところではありましたが、そもそもベンチマークがとれるということも知らなかったので、知識としてあっても良いと思いました。

これからGoを触っていく中でベンチマークも取ることがあるかもしれないですしね。

まとめ

まとめとしては、とても学びが多い本でした。

もちろん既に知っていることや、あまり自分には必要なさそうな箇所もあったとは思いますが

いずれにしても再確認や、知識として知っておくというだけでも読んで良かったと思える本でした。

まだまだGoを始めて日が浅い自分なので、こういったベストプラクティスなどをまとめてもらえるのは、すごく有益でした。

個人開発ではGoを触っているので、もう一回読みながら書いてるコードに適用していけたらと思います。