Posted at

[Go] Goプログラミング実践入門を読んで、第二章の掲示板のサンプルをクローンしてカテゴリ機能を追加するまでにやったこと


はじめに(駄文)

寒いですね

北の大地は試される大地と化してます

こんな寒い日は温泉にでも浸かりながらプログラミングしたいですね

温泉で使える端末ないですけどね

それはさておき、Go に関して

Go 勉強中で今は本を中心に勉強してます

今読んでる本は [Amazon] Goプログラミング実践入門 http とはなんぞやってところから書かれててなんとなーく web 業界に従事してた身としてはありがたかったです

今回はその本の第二章の掲示板サンプル「 chitchat 」のクローンを行なって、カテゴリ機能を追加したときの議事録です

当方ペチパーなので、PHP と比較してるところが何箇所かあります


1. クローンしてローカルで動くように

GitHub 上に公開されているレポジトリがあるので持ってきます

[GitHub] mushahiroyuki/gowebprog

今回必要なのは第二章 chitchat なのでそれだけ分離して git init !!

準備完了かと思ったんですが、 postgress を使ったことなかったので以下を参照に導入

[Qiita] macOs Sierra + homebrewな環境でPostgresqlを導入する備忘録

これであとは README.md の通りのコマンドを叩いて初期設定完了しました


2. さっとサンプルを読む

以下のことがわかりました


  • テーブルは users sessions threads posts

  • threads 1 : posts n のよくある掲示板構成

  • route の定義を handler を使ってやってる

  • go のテンプレートの書き方が結構独特( smarty に似てる )

  • ORM マッパー的なのは使わず直接クエリ叩いて構造体にマッピングしてる


3. 実装手順を考える


  1. テーブル categories 用意


  2. categories 一覧参照できるように


  3. category に紐づく thread が参照できるように


  4. category に紐づく thread が作成できるように

あとは既存機能でうまくいけそう ... ??


4. カテゴリーテーブルを用意する

マイグレーションが setup.sql に集まってる構成だったので、そこに categories のテーブルを追加

シードとして、適当データを突っ込んどきました

https://github.com/mentol310/chitchat_clone/commit/bc7e4232f4d7f2e64abbaefc80df0b95093c7e09

カテゴリーのシードを追加すると、ユーザーもあったほうがいいなと思ったので合わせて追加

https://github.com/mentol310/chitchat_clone/commit/764a0118339d38d26ca5e7fdb8619d20a5a9336f


5. カテゴリー一覧を参照できるように

エンティティ追加して色々試してみてたんですが、なんか変更が反映されずおかしいな〜〜と思ったら import が元の箇所を参照したままになってる罠に遭遇したので修正

https://github.com/mentol310/chitchat_clone/commit/77cb2f1ed7dc2a513522ae22f257b8df8567af12

import で相対パス利用できるといいですね ... なんでできないんでしょう ??

無事、一覧参照ページ追加

https://github.com/mentol310/chitchat_clone/commit/0aafe6168452bc222de75acc7712543d03f01cd0

Go のテンプレート、smarty に似てるなと第一印象では思いましたが、. でアクセスできるとか range の使い方とか冗長な記述をしないで良くてシンプルで使いやすいと思いました


6. カテゴリーに紐付いたスレッドを参照できるようにする

デフォルトのルーティングだとなんかつらみを感じたので、その辺で強いと噂の

gorilla/mux を導入しました

https://github.com/mentol310/chitchat_clone/commit/e7e582939c2be292a42c2d51afe6d6f0e3aeaa13

デフォルトからそのまま置き換えれて、協力なルーティングができるので強いです

さすがゴリラ

https://github.com/mentol310/chitchat_clone/commit/9e0c62172d1635b655a40f6d9cdcbc6c42f06447

このときの動作検証でなんか css が当たらなくなったので詰まってました

調べると以下がヒット

[stackoverflow] Golang Gorilla mux with http.FileServer returning 404

書かれてる通り PathPrefix 使ったら直りました

https://github.com/mentol310/chitchat_clone/commit/8f951586f1cef0b0ed846b05d07568791d0a99f5


7. カテゴリーに紐付いたスレッドを作成できるように

そんなこんなで作成できるようになりました

https://github.com/mentol310/chitchat_clone/commit/153818d309ca7f3f79e25993dc706dcb87ad9638


終わり

実際のサンプルを見て機能追加してみると、基礎構文を知っただけじゃわからないところも見えてくるのでめっちゃ勉強になりますね !!

もっと機能追加しようと思えばできますし、今後もやってこうと思います :raised_hands: