PHP-Editor Apple stellt Ihnen hier einen nützlichen Trick vor, nämlich wie Sie überprüfen können, ob Go Template alle Vorlagendaten verwendet. Während des Entwicklungsprozesses kommt es manchmal vor, dass einige Vorlagendaten nicht verwendet werden, was zu einer unvollständigen Datenwiedergabe oder unnötigen Leistungseinbußen führen kann. Mit den folgenden Methoden können wir dieses Problem schnell überprüfen und lösen. Zunächst müssen wir die grundlegende Syntax und Verwendung von Go Template verstehen. Anschließend können wir das Go-Tool verwenden, um die Vorlagendatei zu analysieren und einen AST (Abstract Syntax Tree) zu generieren. Durch das Durchlaufen dieses AST können wir alle Vorlagenidentifikatoren finden und sie mit der Datenquelle vergleichen, um festzustellen, ob ungenutzte Vorlagendaten vorhanden sind. Diese Methode ist einfach und effektiv, ich hoffe, sie wird für alle hilfreich sein!
Angenommen, ich habe eine Vorlagenzeichenfolge
today i visited {{ .market }} to buy {{ .fruit }}
Die bereitgestellten Vorlagendaten sind
map[string]string := { market: "whole foods", fruit: "bananas", veg: "celery" }
Ich möchte hier in Panik geraten, weil .veg
in der Vorlagenzeichenfolge nicht verwendet wird. Ist es möglich?
Ich verwende Go-Vorlagen (text/template
). text/template
)。
没有内置支持。您可以分析已解析的模板,但它不必要地复杂。另请注意,这种静态分析永远不可能完成:模板可以根据运行时参数访问数据,并且是否使用所有内容只能在运行时决定,并且可能因执行而异(例如,可以使用 索引映射值) {{index .someMap .someKey}}
其中 someKey
verwenden). Kartenwert) {{index .someMap .someKey}}
wobei someKey
der zur Laufzeit bereitgestellte Wert ist). Eine akzeptable Lösung könnte darin bestehen, eine Datenstruktur zu übergeben, die verfolgt, auf welche Elemente zugegriffen wurde. Sie können dies überprüfen, nachdem die Vorlage ausgeführt wurde, und wenn nicht alles verwendet wird, können Sie tun, was Sie wollen.
Diese Struktur verfolgt beispielsweise, welche Elemente noch nicht besucht wurden:
type Params struct { m, remaining map[string]string } func NewParams(m map[string]string) *Params { return &Params{ m: m, remaining: maps.Clone(m), } } func (p *Params) Get(key string) string { delete(p.remaining, key) return p.m[key] }
const src = `today i visited {{ .Get "market" }} to buy {{ .Get "fruit" }}` t := template.Must(template.New("").Parse(src)) m := NewParams( map[string]string{"market": "whole foods", "fruit": "bananas", "veg": "celery"}, ) if err := t.Execute(os.Stdout, m); err != nil { panic(err) } fmt.Println() if len(m.remaining) > 0 { fmt.Println("Following entries were not used:", m.remaining) }
Go Playgroundm
和 remaining
):
today i visited whole foods to buy bananas Following entries were not used: map[veg:celery]
Das obige ist der detaillierte Inhalt vonSo überprüfen Sie, ob alle Vorlagendaten von go template verwendet werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!