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

Comment accéder au pipeline parent/global dans l'action de plage des modèles Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-10 18:34:02207parcourir

How to Access the Parent/Global Pipeline in Go Templates' Range Action?

Accès au pipeline parent/global dans l'action de plage des modèles Go

Dans le package texte/modèle de Go, la possibilité d'accéder aux pipelines avant un l’action de plage ou le pipeline parent/global est essentiel. Prenons l'exemple suivant :

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

Dans cet exemple, l'accès à .Path ne sera pas possible dans l'action de plage car .dot se transforme en l'élément Files actuel.

Recommandé Solution - Utilisation de la variable $

Selon la documentation du package texte/modèle, la variable $ contient l'argument de données transmis à Execute, qui est la valeur initiale de .dot. Ainsi, pour accéder au chemin de la portée externe à l'aide de $.Path dans l'action de plage, utilisez la variante suivante :

const page = `{{range .Files}}<script src="{{html $.Path}}/js/{{html .}}"></script>{{end}}`

Solution alternative - Variable personnalisée

Avant l'action de plage, une variable personnalisée peut être définie pour transmettre une valeur dans la portée de la plage. Par exemple :

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