Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mengekstrak Senarai Tindakan daripada Templat Parsed Go?

Bagaimana untuk mengekstrak Senarai Tindakan daripada Templat Parsed Go?

Linda Hamilton
Linda Hamiltonasal
2024-12-16 12:12:11584semak imbas

How to Extract Action Lists from a Parsed Go Template?

Mendapatkan Senarai Tindakan daripada Templat yang Dihuraikan

Soalan:

Bagaimana saya boleh mendapatkan semula senarai tindakan templat (seperti yang ditakrifkan oleh {{ .blahblah }}) daripada yang dihuraikan templat?

Kata Pengantar:

Medan Templat.Pokok, seperti yang dinyatakan, tidak boleh dipercayai untuk peruntukan input dalam pelaksanaan templat. Adalah penting untuk menentukan templat dan data yang dijangkakan terlebih dahulu.

Penyelesaian:

Untuk memeriksa templat yang dihuraikan, navigasi pepohon hurainya (template.Template.Tree) . Nod dalam pepohon ini mewakili pelbagai elemen, termasuk tindakan templat. Di sini, kami menumpukan pada nod jenis parse.NodeAction (Tindakan Dinilai sebagai Medan).

Contoh Kod:

Kod berikut merentasi pepohon parse secara rekursif untuk mengenal pasti nod dengan NodeAction taip:

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
}

Penggunaan:

Gunakan fungsi ListTemplFields pada templat yang dihuraikan untuk mendapatkan semula senarai token tindakan:

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

Output:

Output untuk yang disediakan templat ialah:

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

Atas ialah kandungan terperinci Bagaimana untuk mengekstrak Senarai Tindakan daripada Templat Parsed Go?. 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