Go言語でのWebアプリ開発学習その4~標準ライブラリのHTMLテンプレートにマップ渡す
前回 ( https://note.com/yasmizohawks/n/nbce30969b4d1 ) に引き続き
Go言語でのWebアプリ開発についていろいろ見てみます。
今回は標準ライブラリのHTMLテンプレートでのマップの渡し方を見てみます。
■ マップをHTMLテンプレートへ渡す
前回 ( https://note.com/yasmizohawks/n/nbce30969b4d1 ) は
構造体をHTMLテンプレートへ渡すサンプルを作りましたが
今回はキーとバリューのコレクションであるマップを
HTMLテンプレートへ渡したいと思います。
ファイルの配置は以下になります。
それぞれのファイルの内容は以下になります。
HTMLテンプレートにデータを埋め込む htmlTemp04.go
package main
import (
"html/template"
"net/http"
)
func main() {
http.HandleFunc("/", executeTemplate)
http.ListenAndServe(":8080", nil)
}
func executeTemplate(w http.ResponseWriter, r *http.Request) {
userInfoMap := map[string]string{
"userName":"溝口泰成",
"age":"53",
"sex":"男性",
}
t := template.Must(template.ParseFiles("./htmlTempSample03.html"))
if err := t.Execute(w, userInfoMap); err != nil {
panic(err)
}
}
executeTemplate 関数の以下の部分で
マップ型変数の宣言と初期化を同時にやってます。
とりあえずキーもバリューもどちらも string 型にしてます。
構造体のときは、以下のように変数名の先頭を大文字にする必要がありました。
変数の先頭を大文字にしないとパッケージの外から
変数にアクセスできないためにそうしたのですが、
マップにおける「構造体内の変数名」に該当する「キー名」は
「変数ではなく値」なので、大文字にする必要はありません。
※ HTMLテンプレートから「変数名で参照する」場合は
パッケージ外からのアクセス制限がからんできますが
HTMLテンプレートから「値で参照する」場合は
アクセス制限の影響はないということです
なので、
"userName":"溝口泰成"
の「userName」の先頭はあえて小文字にしてます。
executeTemplate 関数の以下の行で
Execute 関数の第二引数にマップ型の変数 userInfoMap を渡してます。
HTMLテンプレートファイル htmlTempSample03.html
<!DOCTYPE html>
<html>
<head>
<title>sample</title>
</head>
<body>
<p>名前:{{.userName}}</p>
<p>年齢:{{.age}}</p>
<p>性別:{{.sex}}</p>
</body>
</html>
以下の部分で
{{.【マップのキー名】}} という記載をすることで
マップのバリュー値が表示されます。
実行してみます。
まずは、htmlTemp04.go (HTTPサーバ)を起動
続いてブラウザでURLに「http://localhost:8080/」を指定して確認
マップの各キーに設定したバリュー値が表示されました。
次回も引き続き標準ライブラリのHTMLテンプレートについて見ていきます。