Maison > développement back-end > Golang > Comment puis-je récupérer les noms de variables du code source à l'aide de Reflection pour les modèles ?

Comment puis-je récupérer les noms de variables du code source à l'aide de Reflection pour les modèles ?

DDD
Libérer: 2024-12-03 17:35:11
original
1011 Les gens l'ont consulté

How Can I Retrieve Variable Names from Source Code Using Reflection for Templating?

Récupération de nom de variable à l'aide de la réflexion

Dans une tentative de construire un système de modèles convivial, la question se pose : comment obtenir le nom de variable tel qu'il apparaît dans le code source en utilisant la réflexion ?

Le but est de créer une tranche de variables (chaînes) et de la parcourir, en remplaçant le balisage {{}} des espaces réservés avec des valeurs variables réelles. Par exemple, si le nom de la variable est onevar, le système doit analyser le modèle pour {{onevar}} et le remplacer par la valeur de la variable.

Cette tâche implique de comprendre la nature de la réflexion lorsqu'on traite des variables. Dans l'extrait de code fourni :

onevar := "something"
other := "something else"

var msg string
sa := []string{onevar, other}
for _, v := range sa {
    vName := reflect.TypeOf(v).Name()
    vName = fmt.Sprintf("{{%s}}", vName)
    msg = strings.Replace(msg, vName, v, -1)
}
Copier après la connexion

Le code tente de récupérer le nom de la variable en utilisant la réflexion :

vName := reflect.TypeOf(v).Name()
Copier après la connexion

Cependant, cette approche échoue car une tranche contient des valeurs, pas des variables . Par conséquent, obtenir le nom de la variable à partir d'une tranche s'avère impossible.

Solution :
Pour résoudre ce problème, pensez à utiliser une carte au lieu d'une tranche, car les cartes associent des clés (noms de variables ) avec des valeurs :

vars := map[string]string{
    "onevar": "something",
    "other": "something else",
}

var msg string
for name, value := range vars {
    vName := fmt.Sprintf("{{%s}}", name)
    msg = strings.Replace(msg, vName, value, -1)
}
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal