Maison  >  Article  >  développement back-end  >  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
Susan Sarandonoriginal
2024-11-12 08:18:02664parcourir

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"}})
}

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

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

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:
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