Heim  >  Artikel  >  Backend-Entwicklung  >  Golang-Text/Vorlage beginnt mit Funktion

Golang-Text/Vorlage beginnt mit Funktion

WBOY
WBOYnach vorne
2024-02-06 11:15:03559Durchsuche

golang 文本/模板以函数开头

Frageninhalt

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

{{if eq (slice $c 0 5) "begin"}}

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}}
`

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen