Ich bin in der Go-Funktion text/template
包中没有看到任何类型的 startswith
. Ist das die beste Implementierung?
{{if eq (slice $c 0 5) "begin"}}
Es gibt keine integriertestartswith
Vorlagenfunktion.
Am saubersten ist es, wenn Sie eine benutzerdefinierte Funktion mit dieser Funktionalität registrieren:
func main() { t := template.must(template.new("").funcs(template.funcmap{ "hasprefix": strings.hasprefix, }).parse(src)) for _, s := range []string{"foo", "begining"} { if err := t.execute(os.stdout, s); err != nil { panic(err) } } } const src = `{{.}}: {{if hasprefix . "begin"}}yes{{else}}no{{end}} `
Dies wird ausgegeben (versuchen Sie es auf Go Playground):
foo: no begining: yes
Wenn Sie keine benutzerdefinierte Funktion registrieren können oder wollen, slice
funktioniert mit Strings, aber Sie müssen damit vorsichtig sein: Wenn der Eingabestring kürzer als 5 Bytes ist, erhalten Sie einen Fehler bei der Vorlagenausführung!
Stattdessen (wenn Sie keine benutzerdefinierte Funktion registrieren möchten) empfehle ich, ohne Panik die integrierte Funktion printf
函数,精度是要比较的字符串的长度。如果输入字符串较短,printf
zu verwenden:
{{if eq (printf "%.5s" .) "begin"}}yes{{else}}no{{end}}
Diese Ausgabe ist die gleiche. Probieren Sie es auf dem Go-Spielplatz aus.
Bitte beachten Sie, verwenden Sie hasprefix
更安全、更干净、更简单,因为我们不必硬编码前缀的长度 (5
).
Beachten Sie, dass wir mit der expliziten Parameterindizierung diesen Teil auch dynamisch machen können:
{{$prefix := "begin"}}{{if eq (printf "%.[1]*s" (len $prefix) .) $prefix}}yes{{else}}no{{end}}
Wie Sie sehen können, können wir die fest codierte Länge des Präfixes entfernen 5
. Dadurch wird wieder derselbe Inhalt ausgegeben, probieren Sie es auf dem go-Spielplatz aus.
Eine letzte Sache, die Sie beachten sollten: Die Slice-Zeichenfolge interpretiert den Index als Byte-Index, während die in der Formatzeichenfolge verwendete Genauigkeit als Runenanzahl interpretiert wird!
Das obige ist der detaillierte Inhalt vonGolang-Text/Vorlage beginnt mit Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!