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) }
Le code tente de récupérer le nom de la variable en utilisant la réflexion :
vName := reflect.TypeOf(v).Name()
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) }
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!