Maison > développement back-end > Golang > Comment fonctionne la portée variable dans les modèles HTML Golang ?

Comment fonctionne la portée variable dans les modèles HTML Golang ?

Susan Sarandon
Libérer: 2024-11-20 04:27:02
original
604 Les gens l'ont consulté

How Does Variable Scope Work in Golang HTML Templates?

Limitations de la portée des variables dans les modèles HTML Golang

Dans les modèles HTML de Golang, les variables sont introduites à l'aide de l'opérateur := et ont une portée limitée dans le modèle. Par conséquent, les modifications apportées aux variables au sein des blocs conditionnels ne sont pas accessibles en dehors de ceux-ci. Cela peut s'expliquer par la philosophie de conception des modèles dans Go, qui met l'accent sur la simplicité et décourage la logique complexe.

Restrictions de portée variable

Comme indiqué dans le package texte/modèle documentation :

"La portée d'une variable s'étend jusqu'à l'action 'fin' de la structure de contrôle ("if", "with" ou "range") dans laquelle elle est déclarée, ou jusqu'à la fin du modèle s'il n'existe pas une telle structure de contrôle. {if}} bloc, une nouvelle variable {{$currentUserId}} est introduite et occulte celle existante. Sa portée est limitée au bloc, le rendant inaccessible en dehors de la limite conditionnelle.

Solutions de contournement possibles

1. Fonction personnalisée pour l'accès aux variables :
{{if .UserData}}
    {{$currentUserId := .UserData.UserId}}
    [<a href="#ask_question">Inside {{$currentUserId}}</a>]
{{else}}
    {{$currentUserId := 0}}
{{end}}
[<a href="#ask_question">outside {{$currentUserId}}</a>]
Copier après la connexion

Une approche efficace consiste à créer une fonction personnalisée "CurrentUserId()" qui renvoie l'ID utilisateur si UserData est présent, sinon 0. Cette fonction peut être enregistrée avec le modèle en utilisant la méthode Funcs().

2. Variables modifiables simulées :

Les fonctions personnalisées peuvent également simuler des variables modifiables. Considérez "SetCurrentUserId()" qui modifie une valeur stockée dans une carte transmise en tant que données de modèle :

En utilisant ces solutions de contournement, vous pouvez surmonter les restrictions de portée variable dans les modèles HTML Golang, garantissant ainsi une meilleure flexibilité dans utilisation variable.
func main() {
    m := map[string]interface{}{}
    t := template.Must(template.New("").Funcs(template.FuncMap{
        "CurrentUserId": func() int {
            if u, ok := m["UserData"]; ok {
                return u.(UserData).UserId
            }
            return 0
        },
    }).Parse(src))
}
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!

source:php.cn
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