Go言語 ~基礎編~ Webアプリ作成

go

今回は、簡単なWebアプリケーションを開発していきます。

学習記事まとめ

シンプルなWebアプリ

Go言語にデフォルトで組み込まれているnet/httpパッケージを使用するとシンプルなWebサーバーを立てることができます。

実装を終えたら次のコマンドを実行してみましょう。

続いて、「localhost:8080/hello」にアクセスします。

メッセージをbyte形式に変換し、レスポンスに乗せて呼び出し元に結果を返しています。

Go言語ではこのようなWebアプリケーションサーバーを迅速に立てることができます。

複数のエンドポイントを設定する

今回は、エンドポイントを「/hello」としましたが、複数設定することも可能です。

Post App

感じたことをただ投稿するだけのアプリケーションを作成しましょう。

プロジェクト作成

最初にプロジェクトを作成します。

エラーチェックコード作成

utilsパッケージのcheck.goには、エラーチェックコードを書き込みます。

Webサーバーコード作成

post_server.goには、Webサーバーコードを書き込みます。

実行して見ましょう。

「localhost:8080/post」にアクセスしてみます。

投稿リストの作成

これまでは、プレインなテキストファイルをただ返していましたが、HTMLファイルを返却できるようにしましょう。

view.htmlに次のコードを記述しましょう。

このHTMLをサーバーのレスポンスを通じて表示できるようにします。

postHandlerを修正しました。template.ParseFilesでHTMLファイルをパースし、htmlパッケージのExecuteメソッドでリクエストとして返しています。

サーバを起動し、内容を確認して見ましょう。

「localhost:8080/post」にアクセスしてみましょう。

テンプレートにデータを渡す

次は、先ほど作成したHTMLテンプレートにデータを渡して表示できるようにしましょう。

テンプレートにデータを表示させるためには、いくつかのルールを覚える必要があります。

Djangoなどのフレームワークを使って開発されてきた人には、とっつきやすいかもしれません。

テンプレートにデータを埋め込みたい時は、「{{}}」で囲います。そして、データを参照したい場合は、「.」を指定してデータを取得します。

if action

if actionで判定処理を行うこともできます。

range action

range actionで、コレクションデータ(array, slice, map, channel)に対して繰り返し処理を実行できます。

Structフィールド名をテンプレートに埋め込む

Structフィールドを名をテンプレートに埋め込むことができます。

他のファイルの情報を読み取る

getStrings関数を追加して、他のファイルの情報を読み取れるようにします。

投稿数を保持できるように新規にStructを定義します。

続いて、postHandlerを以下のように書き換えます。

sigunatures.txtの中身をHTMLファイル上に出力できるようにしました。

次は、このファイルの中身をview.html側で表示できるようにします。

サーバーを起動させて「localhost:8080/post」にアクセスします。

HTMLフォームを追加する

次は、HTMLフォームを追加して、動的にデータを格納できるようにします。

新しくハンドラーを追加し、このhtmlファイルを表示できるようにします。

サーバーを再起動して、「localhost:8080/post/new」にアクセスします。

このフォームからデータをサーバー側に送って、signatures.txtに書き込めるようにします。

まずは、フォームの送信形式をPOSTに変更します。

次にpost_server.goにcreateHandlerを追加します。

サーバーを起動してデータを送信してみましょう。

フォームからデータを追加してみました。signature.txtの中身をみてみるとデータが追加されていることがわかります。

最後に、投稿したらトップページにリダイレクトされるように変更しましょう。

もう一度サーバーを再起動して、データを投稿してみましょう。今度は、トップページにリダイレクトされるはずです。

おわりに

15章にも及ぶGo言語の学習もこの章で最後です。

ここまで勉強したらGo言語の基礎はバッチリでしょう。

次は、より実践的なアプリケーションに挑戦してみてください。

お疲れ様でした!

参考書籍

コメントを残す