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>]
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)) }
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!