Go言語(Golang)でMVCモデルを実現する 後編

はじめに

この記事は以下の記事の続きになります
https://bsblog.casareal.co.jp/archives/4822

この記事では、Go言語(以下、Golangと表記)でのWEBアプリケーション構築の習得を目的に、MVCモデルで開発を進めることを考え、VC部分に続き、M部分の実装を行いました。

用意した環境

  • OS: Windows10
  • Golang: 1.15.2
  • フレームワーク:Gin

環境変数のGOPATHは以下で設定してあります。
GOPATH = C:\Users\murai\Documents\GolangProject

環境構築が必要であれば前々回の記事を参考にしてください。
https://bsblog.casareal.co.jp/archives/4582

この記事での目標

簡易的な会員管理システムを作るにあたって、
前回は各画面の表示ができるところまで実装を行いました。

そこで今回はMysqlからデータ取得、登録、編集する機能を作成し、
Golangを使用した簡易的な会員管理システムの完成を目標とします。

ディレクトリ構成

この記事で使用するプロジェクトのディレクトリ構成は以下になります。

Mysqlを使う準備

GolangでMysqlを使うにあたってドライバーのインストールが必要になるため、
次のコマンドでインストールを行いました。

DBの準備

使用するDBのスキーマは「go」、テーブルは「user」としました。

Modelを作成する

MVCのMの部分にあたるModelを作成しました。
機能としては以下になります。

  • 会員一覧画面で使用する全会員のリスト取得
  • 会員編集画面で使用する指定した会員の情報取得
  • 会員編集時のレコード更新
  • 会員追加時のレコード追加

model/user.go

会員一覧画面の修正

controller/user/list.go

作成したModelをインポートし、
会員の一覧を取得するメソッドを呼び出す記述を加えました。

view/user-list.html

controllerから会員リストの変数を受け取って、
一行ごとに描画する処理を追記しました。

実際に表示されたのが次の画像です。
DBから正しく取得できているのが確認できました。

会員編集画面の修正

router.go

会員の編集処理を実行するルートを作っておきます。

controller/user/edit.go

作成したModelをインポートし、
指定会員の情報を取得するメソッドを呼び出す記述を加えました。
また、会員の編集を実行するメソッドを追加しました。

view/user-edit.html

controllerから会員情報の変数を受け取って、
formの項目に使用する処理を追記しました。

実際に表示されたのが次の画像です。
DBから正しく取得できているのが確認できました。

会員の編集を行った後の画面が次の画像です。
指定の会員の名前が編集できていることが確認できました。

会員追加画面の修正

router.go

会員の追加処理を実行するルートを作っておきます。

controller/user/add.go

作成したModelをインポートし、
また、会員の登録を実行するメソッドを追加しました。

view/user-add.html

会員の登録情報を送るためのformを追記しました。

実際に表示されたのが次の画像です。

会員の追加を行った後の画面が次の画像です。
新しく会員が追加できていることが確認できました。

まとめ

最低限ではありますがGolangを使って、
会員のリスト表示、編集、追加ができる会員管理システムを作成することができました。
まだまだ見た目も機能も最低限で実際に運用できるレベルのものではありませんが、
基盤はできたので、ここから肉付けを行っていけば、
実際に運用できるレベルのシステムは作れそうだと感じています。

ここまで作ってみた感想としては、
Golangは、普段PHPを使っている自分にとっては新鮮味がありました。
連想配列に宣言した型しか入れられなかったり(idを文字列化しないといけないなど)、
自作パッケージのインポートがなかなかうまくいかなかったことに一番手を焼きました。。。
今回、Golangのみで完結するWebシステムを作ろうと進めてきましたが、
終わってみると、Golangは一応Webシステムも作れますが、
viewを使わないで、APIとしての運用の方が向いていそうに感じました。


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です