ホームページ >バックエンド開発 >Golang >Go テンプレートからアクションのリストを抽出するにはどうすればよいですか?

Go テンプレートからアクションのリストを抽出するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-17 04:16:251001ブラウズ

How to Extract a List of Actions from a Go Template?

Go でテンプレートの「アクション」にアクセスする方法

テンプレートは、データを構造化テキストにレンダリングする強力な方法を提供します。場合によっては、テンプレートをイントロスペクトして、定義されているアクションのリストを決定することが望ましい場合があります。

テンプレート構造

解析されたテンプレートは、次のツリーとして表されます。ノード。各ノードは、テキスト、アクション、制御構造など、テンプレート内の特定の構成要素を表します。

アクションの識別

アクションは、データの取得方法を定義するノードです。または加工されたもの。これらは、フィールドにアクセスしたり、データ モデル内の関数を呼び出したりするために使用できます。ツリー内のアクション ノードを識別するには、parse.NodeAction タイプのノードを確認します。

実装例

これは、テンプレート ツリーを再帰的に調べてすべてを収集する関数の例です。アクション ノード:

func ListTemplateActions(t *template.Template) []string {
    return listNodeActions(t.Tree.Root, nil)
}

func listNodeActions(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 = listNodeActions(n, res)
        }
    }

    return res
}

この関数は、各アクション ノードのテキスト表現。

使用法

この関数を使用するには、テンプレートを解析してから ListTemplateActions を呼び出します。例:

t := template.Must(template.New("test").
    Parse(`<p>{{ .name }} - {{ .age }}</p>`))
fmt.Println(ListTemplateActions(t))

出力:

[{{.name}} {{.age}}]

このデモでは、解析されたテンプレートで定義されたアクションのリストを識別して取得する方法を示します。これにより、予期される入力と、それに応じてデータ モデルを動的に構築します。

以上がGo テンプレートからアクションのリストを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。