html/templateで key=val を出力する際は template.HTMLAttr型を使う
すごい久しぶりに goコードを書いたらいろいろと忘れていたのでメモ
templateに任意の属性を出力するようなコードを書きたかったが,
package main import ( "html/template" "log" "os" ) var htmlTemplate = ` <p {{.Attr}}> ` type Data struct { Attr string } func main() { t, err := template.New("test").Parse(htmlTemplate) if err != nil { log.Fatal(err) } d := Data{ Attr: `class="foo"`, } if err := t.Execute(os.Stdout, &d); err != nil { log.Fatal(err) } }
string
と宣言してしまうと下記のようになってしまう
<p ZgotmplZ>
どうするだと思って調べたところ template.HTMLAttr 型を使えばよかった
package main import ( "html/template" "log" "os" ) var htmlTemplate = ` <p {{.Attr}}> ` type Data struct { Attr template.HTMLAttr } func main() { t, err := template.New("test").Parse(htmlTemplate) if err != nil { log.Fatal(err) } d := Data{ Attr: `class="foo"`, } if err := t.Execute(os.Stdout, &d); err != nil { log.Fatal(err) } }
出力は以下のようになる
<p class="foo">
ドキュメントにあるように信頼できる入力に対してのみ使うべきで何でも使うべきではないので利用の際は注意が必要