[Golang]~MovieApp2: GoからPostgreSQLの処理を実装しよう!~

こんにちは、KOUKIです。

Golang/ReactでMovie Appの開発をしています。

今回は、PostgreSQLを導入し、DB処理を実装していきます。

尚、Udemyの「Working with React and Go (Golang)」を参考にしているので、よかったら受講してみてください。

前回

Webサーバーのルーティング処理を実装しました

事前準備

フォルダ/ファイル

モジュール

PostgresSQLのDocker化

PostgreSQLの環境をDockerで導入します。

Dockerfile-postgres

Dockerfile-postgresファイルには、PostgreSQLの構成情報を記述します。

ここで注目なのが、「docker-entrypoint-initdb.d」フォルダ配下にsqlファイルを設置しておくとコンテナ作成時に、自動的にsqlを実行してくれるところです。DBの初期化に役立ちます。

docker-compose.yml

docker-compose.ymlにpostgresサービスを追加します。

PostgreSQL本体とGUIを用意しました。

go-movies.sql

初期化SQLを以下に記載します。

コンテナの立ち上げ

下記のコマンドで、PostgreSQLコンテナを立ち上げます。

確認

ブラウザから「http://localhost:9232/」にアクセスするとテーブルと導入されたデータが確認できます。

PostgreSQLへ接続

GolangからPostgreSQLへ接続しましょう。

PostgreSQLへ接続するDSNですが、docker-compose.ymlに設定したService名、ユーザー名、パスワード、テーブル名を使用しています。

コンソールからエラーが出ていなければ、接続成功です。

DB処理

GolangからPostgreSQLを操作するコードを実装しましょう。

Modelとメソッド

movies-db.goには、Movieデータの取得処理を実装します。

中身は後で実装します。

DBModelのラッパーも実装しておきましょう。

Modelをapplicationに登録

main.goに実装したapplication構造体に、Modelを追加します。

これで、DBにアクセスしてデータを取得する枠組みを実装することができました。

Getメソッドの実装

Getメソッドは、利用者側から渡されたidをキーにDBを検索し、Movie情報を返します。

このメソッドは、前回実装したMovieハンドラーから呼び出します。

下記のパラメータで、テストをしましょう。

  • URL: http://localhost:4000/v1/movie/1
  • 形式: GET

OKですね。PostgreSQLに保存されたデータが取得できました。

Genres取得

Movie構造体には、MovieGenreがあります。これは、Movieのカテゴリーを示すものです。

これを取得する処理をGetメソッドに追加します。

さらに、Movie構造体のjsonタグも変更します。

json:"-"」⇨ 「json:"genres"」に変更しました。これで、呼び出し元でgenresが確認できます。

また、「http://localhost:9232/」へアクセスして、下記のデータを追加しましょう。

データの投入に成功したら、下記のパラメータで、テストをしましょう。

  • URL: http://localhost:4000/v1/movie/1
  • 形式: GET

genres(カテゴリー)にデータが入っていることが確認できれば、OKです。

不要なデータの非表示

戻り値に不要なデータは、jsonキーワードに「-」を指定することで非表示にすることができます。

例えば、以下のような感じです。

MovieGenreフィールドの修正

MovieGenreフィールドの構造が複雑なので、シンプルにします。

これで、先ほどと同じ条件でテストします。

genresがシンプルになりました。

Allメソッドの実装

最後にAllメソッドを実装します。Getメソッドの処理とほぼ同じです。

これをハンドラーから呼び出します。

下記のパラメータで、テストをしましょう。

  • URL: http://localhost:4000/v1/movies
  • 形式: GET

全てのデータが取得できているので、OKです。

次回

次回は、GoとReactの連携処理を実装します

記事まとめ

学習記事まとめです

参考書籍

ソースコード

ここまで実装したソースコードを下記に記載します。

Dockerfile-postgres

docker-compose.yml

go_movies.sql

main.go

movie-handlers.go

models.go

movies-db.go

コメントを残す