Maison > développement back-end > Golang > Comment accéder au pipeline parent/global dans une plage dans les modèles Go ?

Comment accéder au pipeline parent/global dans une plage dans les modèles Go ?

Susan Sarandon
Libérer: 2024-11-12 08:18:02
original
753 Les gens l'ont consulté

How to Access Parent/Global Pipeline within a Range in Go Templates?

Accès au pipeline parent/global dans la plage dans les modèles Go

Problème

Lors de l'utilisation d'un pipeline de plage ({{range pipeline}} T1 {{ end}}) dans le package texte/modèle, la valeur du pipeline externe est-elle accessible avant l'action de plage ou lorsque le pipeline parent/global est transmis à Execute().

Exemple de travail

Dans l'exemple suivant, nous essayons d'accéder à .Path dans le pipeline de plage, mais .Path n'est pas disponible car lorsque le point itère sur les éléments Files .

package main

import (
    "os"
    "text/template"
)

// .Path won't be accessible, because dot will be changed to the Files element
const page = `{{range .Files}}<script src="{{html .Path}}/js/{{html .}}"></script>{{end}}`

type scriptFiles struct {
    Path string
    Files []string
}

func main() {
    t := template.New("page")
    t = template.Must(t.Parse(page))

    t.Execute(os.Stdout, &scriptFiles{"/var/www", []string{"go.js", "lang.js"}})
}
Copier après la connexion

Solutions

Utilisation de la variable $ (Recommandé)

Selon la documentation texte/modèle, au début de l'exécution, $ est défini sur l'argument data transmis à Execute(), qui est la valeur de départ de dot. Cela signifie que le .Path de la portée externe est accessible à l'aide de $.Path.

const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`
Copier après la connexion

Utilisation d'une variable personnalisée (solution héritée)

Une autre approche consiste à utiliser une variable personnalisée pour transmettre une valeur dans la portée de la plage, comme indiqué ci-dessous :

const page = `{{$p := .Path}}{{range .Files}}<script src="{{html $p}}/js/{{html .}}"></script>{{end}}`
Copier après la connexion

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 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal