Golang-Text/Vorlage beginnt mit Funktion

WBOY
Freigeben: 2024-02-06 11:15:03
nach vorne
594 Leute haben es durchsucht

golang 文本/模板以函数开头

Frageninhalt

Ich bin in der Go-Funktion text/template 包中没有看到任何类型的 startswith. Ist das die beste Implementierung?

{{if eq (slice $c 0 5) "begin"}}
Nach dem Login kopieren


Richtige Antwort


Es gibt keine integriertestartswithVorlagenfunktion.

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}}
`
Nach dem Login kopieren

Dies wird ausgegeben (versuchen Sie es auf Go Playground):

foo: no
begining: yes
Nach dem Login kopieren

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}}
Nach dem Login kopieren

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}}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage