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
901 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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal