解析されたテンプレートからテンプレート アクションのリストを取得する
テンプレートで定義されたテンプレートを文字列のスライスとして抽出するにはどうすればよいですか?次のようなテンプレートを考えてみましょう:
<h1>{{ .name }} {{ .age }}</h1>
[]string{"name", "age"} を取得したいと考えています。
解析されたテンプレート ツリーの検査
解析されたテンプレートは、テンプレート構造に関する詳細を含む template.Tree によって表されます。このツリーの各ノードには、その型に関する情報を提供する Node.Type() メソッドがあります。関連するタイプは次のとおりです。
ツリーの反復
テンプレート内のアクションを識別するには、次のことができます。ツリーを反復処理してノードを探索します。次のサンプル関数は、このプロセスを示しています:
import ( "text/template/parse" ) func ListTemplFields(t *template.Template) []string { return listNodeFields(t.Tree.Root, nil) } func listNodeFields(node parse.Node, res []string) []string { if node.Type() == parse.NodeAction { res = append(res, node.String()) } if ln, ok := node.(*parse.ListNode); ok { for _, n := range ln.Nodes { res = listNodeFields(n, res) } } return res }
使用例
テンプレートに必要なフィールドを決定するには:
t := template.Must(template.New("cooltemplate"). Parse(`<h1>{{ .name }} {{ .age }}</h1>`)) fmt.Println(ListTemplFields(t))
出力は次のようになります:
[{{.name}} {{.age}}]
注:このデモは包括的なものではなく、すべてのケースに対応できるわけではありません。ただし、これは、解析されたテンプレート ツリーをイントロスペクトすることによってテンプレート アクションを抽出する概念を示しています。
以上が解析された Go テンプレートからテンプレート フィールド名を抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。