Go言語のテンプレート機能を初心者向けに解説

JavaScriptを有効にしてください

まえがき

Go言語には、HTMLやテキストを動的に生成するための便利なテンプレート機能があります。テンプレート機能を使うことで、コードと表示内容を分離し、メンテナンス性や再利用性を高めることができます。今回は初心者の方にもわかりやすく、Go言語のテンプレート機能について基本的な使い方から実用的な使い方、利点、注意点まで詳しく解説していきます。

テンプレート機能の基本的な使い方

Go言語のテンプレート機能は、主にtext/templateパッケージとhtml/templateパッケージの2種類があります。前者は一般的なテキストを扱う際に、後者はHTMLを安全に扱う際に使用します。

まずは基本的な使い方を見てみましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import (
    "os"
    "text/template"
)

func main() {
    tmpl, err := template.New("example").Parse("こんにちは、{{.Name}}さん!")
    if err != nil {
        panic(err)
    }

    data := struct {
        Name string
    }{
        Name: "もふもふ",
    }

    tmpl.Execute(os.Stdout, data)
}

上記のコードでは、テンプレート内の{{.Name}}という部分が、データ構造体のNameフィールドの値に置き換えられます。

実際に実行すると以下のようになります。

1
こんにちは、もふもふさん!

テンプレートを使ったHTMLの動的生成方法

実際のWebアプリケーションでは、HTMLテンプレートを使って動的なWebページを生成することが多いです。ここではhtml/templateパッケージを使った簡単な例を紹介します。

まず、テンプレートファイルを用意します。

template.html

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<html>
<head>
    <title>{{.Title}}</title>
</head>
<body>
    <h1>{{.Header}}</h1>
    <ul>
        {{range .Items}}
            <li>{{.}}</li>
        {{end}}
    </ul>
</body>
</html>

次に、このテンプレートをGoのコードで読み込み、データを渡して実行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
    "html/template"
    "os"
)

func main() {
    tmpl, err := template.ParseFiles("template.html")
    if err != nil {
        panic(err)
    }

    data := struct {
        Title  string
        Header string
        Items  []string
    }{
        Title:  "もふもふブログ",
        Header: "Goテンプレートの例",
        Items:  []string{"猫", "犬", "うさぎ"},
    }

    tmpl.Execute(os.Stdout, data)
}

実行すると以下のようなHTMLが生成されます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<html>
<head>
    <title>もふもふブログ</title>
</head>
<body>
    <h1>Goテンプレートの例</h1>
    <ul>
        
            <li></li>
        
            <li></li>
        
            <li>うさぎ</li>
        
    </ul>
</body>
</html>

このように、テンプレートを使うことでHTMLの構造とデータを分離し、コードの見通しが良くなります。

テンプレート機能を使うメリット

Go言語のテンプレート機能を使う利点は以下の通りです。

  • コードと表示内容の分離
    テンプレートを使うことで、表示内容をコードから分離でき、メンテナンス性が向上します。

  • 再利用性の向上
    一度作成したテンプレートを複数の場所で再利用できるため、開発効率が向上します。

  • 安全性の向上(html/templateの場合)
    HTMLテンプレートを使うことで、自動的にHTMLエスケープ処理が行われ、XSS(クロスサイトスクリプティング)攻撃を防ぐことができます。

テンプレート利用時の注意点

Go言語のテンプレート機能を使う際には、以下の点に注意しましょう。

  • テンプレートのエラー処理
    テンプレートのパースや実行時にエラーが発生する可能性があります。必ずエラー処理を行い、適切に対処しましょう。

  • データ構造の整合性
    テンプレートに渡すデータ構造とテンプレート内で参照するフィールド名が一致している必要があります。フィールド名が異なると、実行時にエラーが発生します。

  • html/templateとtext/templateの使い分け
    HTMLを扱う場合は必ずhtml/templateを使用しましょう。text/templateをHTMLに使うと、XSS攻撃のリスクが高まります。

あとがき

今回はGo言語のテンプレート機能について、基本的な使い方から実用的な例、利点、注意点まで初心者向けに解説しました。テンプレート機能を使いこなすことで、コードの見通しが良くなり、開発効率も向上します。ぜひ実際に手を動かして、テンプレート機能をマスターしてみてください。


スポンサーリンク

共有

もふもふ

プロフィール

著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア