Go では、HTML またはその他のテキスト形式を動的に生成できるテンプレートを定義して実行できます。テンプレートの出力をキャプチャして変数に割り当てたい場合があります。
これは、Go の組み込みテンプレート言語を使用して直接行うことはできません。次の例のように、これを実行しようとすると、「オペランドに予期しない 」エラーが発生します:
{{$var := template "my-template"}}
この制限を回避するには、次のように登録できます。テンプレート出力を取得するカスタム関数。その方法は次のとおりです:
var t *template.Template // execTempl retrieves the output of a named template. func execTempl(name string) (string, error) { buf := &bytes.Buffer{} // Create a buffer to store the template output. err := t.ExecuteTemplate(buf, name, nil) // Execute the template into the buffer. return buf.String(), err }
t = template.Must(template.New("").Funcs(template.FuncMap{ "execTempl": execTempl, }).Parse(tmpl))
if err := t.Execute(os.Stdout, nil); err != nil { panic(err) }
テンプレートでは、登録された「execTempl」関数を使用して、名前付きテンプレートの出力を取得し、それを変数に割り当てることができます:
const tmpl = `{{define "my-template"}}my-template content{{end}} See result: {{$var := execTempl "my-template"}} {{$var}} `
これは、この使用法を示す完全な例です。手法:
package main import ( "bytes" "fmt" "os" "text/template" ) const tmpl = `{{define "my-template"}}my-template content{{end}} See result: {{$var := execTempl "my-template"}} {{$var}} ` func main() { execTempl := func(name string) (string, error) { buf := &bytes.Buffer{} err := t.ExecuteTemplate(buf, name, nil) return buf.String(), err } t := template.Must(template.New("").Funcs(template.FuncMap{ "execTempl": execTempl, }).Parse(tmpl)) if err := t.Execute(os.Stdout, nil); err != nil { fmt.Println(err) } }
上記のプログラムを実行すると、次の出力が生成されます:
See result: my-template content
この手法を使用すると、任意のテンプレートの出力をキャプチャし、さらに使用するために変数に保存できます。処理またはプレゼンテーション。
以上がGolang テンプレートの出力を変数に割り当てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。