Open11

「詳解Go言語Webアプリケーション開発」読書感想&メモ

ピン留めされたアイテム
sosososo

GolangにおけるWebアプリケーション開発で知っておくべきことを薄く広く知れれば良いなと思い本書を手に取った。
私の現在のステータスは、

  • フロントエンド中心のWebエンジニア5年目
  • A Tour of Go、Gopher Dojo、他の書籍などで基本文法は理解している
  • 実務でちょっと書いたことがある

といった感じ。

sosososo

CHAPTER 02

感想

「context」の話。
基本文法の説明等はなくコード例にいきなりゴルーチンとかが出てくるので、これから読む人は別の書籍や Gopher Dojo とかで基本文法は先に押さえておくことをおすすめする。
知っていればコード例もわかりやすくて良い。

メモ

Contextの役割としては、

  • キャンセルやデッドラインの伝播
  • メタデータを関数やごルーチン間で伝達させる

contextでリクエストのキャンセルや切断を受け取るような実装になっている。
大抵のライブラリ・パッケージが第一引数で受け取るようになっているのはこのため。
そのため、作るアプリケーションのハンドラ内で *http.Request の値から取得した context を受け渡し続けるようにする。

他にもトレースやメトリクスなどの計測を行うときに context に値を入れて伝播させることができる。

sosososo

CHAPTER 03

感想

「database/sql」の話。
冒頭にデーターベースの公式チュートリアルとドキュメントへのリンクが置いてあるのが良い。
個人的に求めている物が公式から発展したよくある使い方や、思想の解説だったので公式でわかることは公式に飛ばされるのが良かった!

コラムに書かれている標準パッケージやOSSのリーディング方法としておすすめされている「pkg.go.dev」を読むというのをやってみた感想としては、他の言語に比べてはるかにOSSリーディングがしやすい言語だと感じた。このあたりはすごく快適。

メモ

database/sql パッケージには XxxContext と Xxx メソッドがあるが、Xxxは後方互換を保つ物なので XxxContext を基本は使用すれば良い。
標準パッケージの database/sql を理解しておくことは大切だが、基本的にはOSSを使用する。

sosososo

CHAPTER 04

感想

可読性のお話し。
exported/unexported の話は知っていたのですんなり理解できたが、別言語から入ってきた人は最初ハマりそうだなとは思った。

メモ

internal という特別なパッケージがある。internal にすると、一つ上の階層とそれ以下のパッケージがアクセスできる。

sosososo

CHAPTER 05

感想

「Go Modules」のお話し。
Go Modulesがリリースされた2019年はJS/TSしか書いていなかったので、Go Modulesは噂で「Goにすごい良い機能が入った」と聞いていたぐらいなので懐かしい気分になった。
今は基本的にGo Modulesを使用するとのこと。

セマンティックバージョニングなどは他の言語と同じだが、パッケージのバージョン管理はGo特有の設計もあるのでそのあたりは気をつける。

依存先のOSSにデバッグコードを埋め込む方法が解説されているのは結構助かる!
(開発してるとやりたくなることがかなりあるので)

メモ

v2 などのバージョンがディレクトリにきられている時はコード上でもその呼び出し方だが、go.mod にバージョン名が書かれている場合は module名でインポートする。
よく使うコマンド

  • go mod init
    • 新しくGoのパッケージやアプリケーションを作成する
  • go get -u
    • パッケージの更新
  • go mod tidy
    • go.mod, go.sum ファイルから余計な記述を削除してきれいにする
sosososo

CHAPTER 06

感想

Goとオブジェクト指向プログラミングのお話し。
オブジェクト指向自体は割と解釈が異なるので、あまり用語に囚われずにGoとしての機能に注力して考えていきたい。
Goには埋め込みがあるが、これが継承ではないというのはその通りだと感じた。

sosososo

CHAPTER 07

感想

インターフェースのお話し。
暗黙的なインターフェースは最初見たとき結構びっくりした機能で、あまり納得感が得られていないところでもあったので詳細な解説がされていて良かった。

sosososo

CHAPTER 08

感想

エラーハンドリングのお話し。
「エラーはただの値である」という表現はまさにそうだなと感じた。
このあたりのエラーを値として扱う手法はTypeScriptでもResult型に近い物があるので、割とすんなり溶け込めた。

IDEの補完呼び出し方法まで書いてあるのは親切。

メモ

エラーオブジェクトを比較するときは errors.Is を使用する
独自パッケージで特定のエラー状態を識別したい場合、パッケージスコープの変数として error の値を定義する

sosososo

CHAPTER 09

感想

無名関数・クロージャのお話し。
このあたりの通常の挙動は他言語と大体同じなのですんなり受け入れられた。
ゴルーチンはGo独特の機能なので利用時は気をつける必要がありそう。

sosososo

CHAPTER 13~

ハンズオン。内容が充実していて良かった。
テスト・モック・認証/認可まで一通り網羅されているので、実際に書いてみて得られる学びがかなり大きかった。