首頁 > 後端開發 > Golang > 如何從解析的 Go 模板中提取模板欄位名稱?

如何從解析的 Go 模板中提取模板欄位名稱?

Barbara Streisand
發布: 2024-12-18 21:43:18
原創
940 人瀏覽過

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

從解析的範本中擷取範本操作清單

如何將範本中定義的範本提取為字串片段?考慮這樣的範本:

<h1>{{ .name }} {{ .age }}</h1>
登入後複製

您希望取得[]string{"name", "age"}.

檢查解析的範本樹

解析後的模板由包含模板結構詳細資訊的template.Tree 表示。該樹的每個節點都有一個 Node.Type() 方法,提供有關其類型的信息。相關類型包括:

  • NodeAction:非控制操作,例如字段求值
  • NodeField:字段或方法名稱

迭代樹

迭代樹
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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板