Maison  >  Article  >  développement back-end  >  le texte/modèle Golang commence par une fonction

le texte/modèle Golang commence par une fonction

WBOY
WBOYavant
2024-02-06 11:15:03559parcourir

golang 文本/模板以函数开头

Contenu des questions

Je suis en fonction go text/template 包中没有看到任何类型的 startswith. Est-ce la meilleure implémentation ?

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

Réponse correcte


Il n'y a pas de fonction de modèlestartswithintégrée.

La chose la plus propre est si vous enregistrez une fonction personnalisée avec cette fonctionnalité :

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

Cela affichera (essayez-le sur go terrain de jeu) :

foo: no
begining: yes

Si vous ne pouvez pas ou ne voulez pas enregistrer une fonction personnalisée, slice fonctionne avec des chaînes, mais vous devez y faire attention : si la chaîne d'entrée est inférieure à 5 octets, vous obtiendrez une erreur d'exécution du modèle !

Au lieu de cela (si vous ne souhaitez pas enregistrer de fonction personnalisée), je vous recommande d'utiliser le printf 函数,精度是要比较的字符串的长度。如果输入字符串较短,printf intégré sans panique :

{{if eq (printf "%.5s" .) "begin"}}yes{{else}}no{{end}}

Cette sortie est la même. Essayez ceci sur le go terrain de jeu.

Attention, utilisez hasprefix 更安全、更干净、更简单,因为我们不必硬编码前缀的长度 (5).

Notez qu'en utilisant l'indexation explicite des paramètres, nous pouvons également rendre cette partie dynamique :

{{$prefix := "begin"}}{{if eq (printf "%.[1]*s" (len $prefix) .) $prefix}}yes{{else}}no{{end}}

Comme vous pouvez le voir, nous pouvons nous débarrasser de la longueur codée en dur du préfixe 5. Cela produit à nouveau le même contenu, essayez-le sur le go Playground.

Une dernière chose à noter : la chaîne de tranche interprète l'index comme un index d'octets, tandis que la précision utilisée dans la chaîne de format est interprétée comme un compte de runes !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer