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) }