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

le texte/modèle Golang commence par une fonction

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-06 11:15:03
avant
657 Les gens l'ont consulté

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"}}
Copier après la connexion


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}}
`
Copier après la connexion

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

foo: no
begining: yes
Copier après la connexion

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}}
Copier après la connexion

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}}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal