技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

template.ParseGlob()【Go】

"Glob"は「掴む」を意味する通り、
引数に指定した「パターンに合致する」複数のファイルを
templateとして取り込む事ができます。

階層が次のようになっているとします。

main.go
templates
    blabla.gohtml
    tpl1.gohtml
    tpl2.gohtml


main関数が次のように書かれていると、
index.htmlには、blabla.gohtmlの内容がコピーされます。

tpl, err := template.ParseGlob("templates/*")    // templates以下にある全てのファイルを取り込む
if err != nil {
    log.Fatal(err)
}

nf, err := os.Create("index.html")
if err != nil {
    log.Fatal(err)
}

err = tpl.Execute(nf, nil)    // blabla.gohtmlの内容がコピーされる
if err != nil {
    log.Fatal(err)
}

template.ParseGlob()をした上で、Executeメソッドを使用した場合、
アルファベット昇順で1番目のファイルがコピーの対象になります。

template.ParseGlob()は複数ファイルを取り込む事ができますので、
ExecuteTemplate()を用いれば、コピーするファイルを選ぶ事ができます。

tpl, err := template.ParseGlob("templates/*")
if err != nil {
    log.Fatal(err)
}

nf, err := os.Create("index.html")
if err != nil {
    log.Fatal(err)
}

err = tpl.ExecuteTemplate(nf, "tpl1.gohtml", nil)    // tpl1.gohtmlの内容をindex.htmlにコピー
if err != nil {
    log.Fatal(err)
}

err = tpl.ExecuteTemplate(os.Stdout, "tpl2.gohtml", nil)    // tpl2.gohtmlの内容を画面出力
if err != nil {
    log.Fatal(err)
}