Lapis Lazuli

technical blog for web developer

【Go】テンプレートを使いこなす

久しぶりプログラミングの記事を。
結構Goの記事書いたなと思っていたのですが、標準パッケージの一つであるtemplateについては触れて来なかったなと。
なので今回はtemplateについて。

template

文字通り、テンプレートを読み込んでフロント側に渡す機能をもったパッケージです。
MVCフレームワークのViewの部分だと思ってもらって問題ないです。

HowTo

使い方の流れを書くと下記のような感じになります。

package main

import html/template

func main() {
    http.HandleFunc("/home", home)

    log.Fatal(http.ListenAndServe(":8000", nil))
}

func home(w http.ResponseWriter, r *http.Request) {
    // テンプレートをパース
    tpl := template.Must(template.ParseFiles("home.tpl"))

    type Address struct {
        Address string
        Tel int
    }

    data := Address{Address: "東京都", Tel: 00000}

    tpl.Execute(w, data)
}

HandleFuncでハンドラーの登録をしてあげて、サーバーを起動します。
この辺りは普通にWebサーバー立ち上げるのと同じですね。

その後のhomeでテンプレートの呼び出しを行っています。

  • ParseFilesでテンプレートファイル(後述)をパース。
  • Mustはエラー処理を簡易化してる関数で、パースエラーが起きるとpanicになります。
  • Exexuteで実際にテンプレートの描画を行っています。第2引数にテンプレートに渡すデータを渡しています。

一番シンプルなやり方はこのやり方ですね。
テンプレートファイルの拡張子はtplで、ほぼ素のHTMLで書けば問題ありません。
ただ渡したデータを表示する場合は、

<p>住所:{{.Address}}</p>
<p>電話番号:{{.Tel}}</p>

二重括弧で囲む形になります。他のテンプレートエンジンによくある形ですね。

htmlとtext

ちなみにtemplateパッケージは、text/templateとhtml/templateと2種類あるのですが、Web用途ではhtmlの方を使うのがいいです。
エスケープ処理などのWeb必須の関数が含まれているからです。

まとめ

ということでtemplateの基本的な機能を使ってみました。
これからこれを使う事が増えると思うので、どんどん使いこなしていきます。