Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekstrak Nama Medan Templat daripada Templat Go Parsed?

Bagaimana untuk Mengekstrak Nama Medan Templat daripada Templat Go Parsed?

Barbara Streisand
Barbara Streisandasal
2024-12-18 21:43:18941semak imbas

How to Extract Template Field Names from a Parsed Go Template?

Mendapatkan Senarai Tindakan Templat daripada Templat yang Dihuraikan

Bagaimanakah anda boleh mengekstrak templat yang ditakrifkan dalam templat sebagai kepingan rentetan? Pertimbangkan templat seperti:

<h1>{{ .name }} {{ .age }}</h1>

Anda ingin mendapatkan []rentetan{"name", "age"}.

Memeriksa Pokok Templat yang Dihuraikan

Templat yang dihuraikan diwakili oleh templat.Pokok yang mengandungi butiran tentang struktur templat. Setiap nod pokok ini mempunyai kaedah Node.Type() yang memberikan maklumat tentang jenisnya. Jenis yang berkaitan termasuk:

  • NodeAction: Tindakan bukan kawalan seperti penilaian medan
  • NodeField: Nama medan atau kaedah

Lelaran Pokok

Untuk mengenal pasti tindakan dalam templat, anda boleh lelaran melalui pepohon dan menerokai nod. Fungsi sampel berikut menunjukkan proses ini:

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
}

Contoh Penggunaan

Untuk menentukan medan yang diperlukan untuk templat:

t := template.Must(template.New("cooltemplate").
    Parse(`<h1>{{ .name }} {{ .age }}</h1>`))
fmt.Println(ListTemplFields(t))

The output akan menjadi:

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

Nota: Demonstrasi ini ialah tidak menyeluruh dan mungkin tidak mengendalikan semua kes. Walau bagaimanapun, ia menggambarkan konsep mengekstrak tindakan templat dengan mengintrospeksi pepohon templat yang dihuraikan.

Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Nama Medan Templat daripada Templat Go Parsed?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn