「Goプログラミング実践入門」の写経がとてもいい勉強になった

先日読んだこの本について内容がよかったので写経に挑戦してます。
blog.suganoo.net

やっと9割がた終わったのですが、とてもよかったです。
写経するの実は今回初めてだったのですが、かなり学びになりますね。

ところどころ端折ってしまったところも多々あるのですが、8割?おおすじの内容は写経して、ローカル環境でchatサービスの一応動くところまで写経できたので良しとしてブログにここまでの感想を書いておこうと思います。

本について気づいたところ

  • 構造体の値をhtmlテンプレートに渡すところが書いてない
  • 僅かに一部値の受け渡しがどうなってるところがわからない
  • DBがpostgreなので、コマンドが戸惑った
  • logout処理ちょっとおかしくないか?
  • js、cssとかのパスを設定するところもうちょっと説明しておいてくれよ

構造体の値をhtmlテンプレートに渡すところが書いてない

本の中ではhtmlに値を渡すところは、一つの値を渡すところしか書いてなかったんですね。
「これ複数の値渡したいときどーしたらいいんだろ?」っと思ってましたが、第二章のchitchatのところをやることでわかりました。
DBデータ取得→構造体にバインディング→構造体を渡すことでhtmlに値を渡すことができます。
書いといてよ。。。

僅かに一部値の受け渡しがどうなってるところがわからない

細かいところですが、サンプルソースでUser.Nameを使ってるがどこから渡してるのか???となるところがありました。
詳しくはissueを見てみてください。
https://github.com/mushahiroyuki/gowebprog/issues/4
著者のgithubにも書いたけど、回答してくれそうにないね。。。
https://github.com/sausheong/gwp/issues/14

DBがpostgreなので、コマンドが戸惑った

DBはこれまでMySQLくらいしか使ったことなかったので、初めてPostgreSQL使ってみました。
DB一覧やテーブル一覧を表示させたいときコマンドが全然違うので戸惑いますね。
勉強になりました。

logout処理ちょっとおかしくないか?

そうサンプルのログアウト処理が、これでいいのかな?と思いました。
ログアウトするごとにwarningメッセージだしてたり、cookieのリミット何もしてなかったり。
同じ事考えてる人がいたようで、こっちのissueを参考にしました。
https://github.com/sausheong/gwp/issues/4

js、cssとかのパスを設定するところもうちょっと説明しておいてくれよ

これもせめて本の中で説明しておいてくれよと思ったところでした。
chitchatの章で書いてあるけど、1ページくらいで書いておいてほしかったなあと。
https://github.com/mushahiroyuki/gowebprog/blob/master/ch02/chitchat/main.go#L14

もうちょっとちゃんとやるところ

  • テストコードちゃんと写経する
  • Herokuにデプロイ

テストコードちゃんと写経する

今回は簡単なWebプログラミングを学んで動かしてみたかったのでほぼテストコードを書いてませんでした。
よくないですねー。。。
まあこれは自分でも動かしたときに「あれ?なんでこれちゃんと表示されないんだー?」っと思ったら、たいていがSQLのスペルミスでした。
"insert int "とか "created_at, FROM"とか。。。。
テストコードかかないですすめると、めちゃめちゃデバッグに時間がかかった。。

いつもはちゃんとテストコード書いてるからな。。。

Herokuにデプロイ

ちゃんとプラットフォームにデプロイまでしないと、できたって言わないからな。
うん、はしょりました。あとでやります。。。。

感想など

  • ファンクション、テンプレートの使い方がわかってよかった
  • 本の著者って大変だな
  • 次はフレームワークGinに挑戦したい

ファンクション、テンプレートの使い方がわかってよかった

テキストにあるように html/template モジュールつかって、テンプレートの使い方が学べたのが良かった。
そう思ったのはRailsをやったとき、いきなりerbとか使ってたりして、そもそもerbテンプレートはどう使うものなのか?とか解説がないままにすすめられることが多くて違和感を感じてしまったからです。
まあフレームワークを学んでから、内部がどうなってるかを学ぶのもありだとは思うけどもねえ。。。

とりあえず今後Goのフレームワークを使うとき、中身の実装が想像しやすくなっていいだろうと思います。

本の著者って大変だな

上述したんですが、サンプルソースわからないところgithubのissueで質問したんですが出版からしばらくたってもこんな質問をうけるなんて、すごい大変だなと思います。
どんな内容だったなんて覚えてられないよ。
その点著者のgithubでは、issueにまーったく答えてないのはまあそうだよなと思いましたw。

次はフレームワークGinに挑戦したい

ということでだいたいのGoによるWebプログラミングがわかったので次はGinに挑戦してみようかなと思います。
その前にテストコードしっかり書いてみたりしますが。

見返してみても、並行処理やjsonの扱い、テストコード、ベンチマークテストなども書かれてるのでかなり学びになった本でした。
かなりおすすめです。

Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ

Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ

(2018/12/06追記)chitchatサンプルソースを修正してみました。

サンプルソースを修正してみました。
blog.suganoo.net