In an attempt to construct a user-friendly templating system, the question arises: how can the variable name be obtained as it appears in the source code using reflection?
The goal is to create a slice of variables (strings) and iterate through it, replacing markup {{}} placeholders with actual variable values. For instance, if the variable name is onevar, the system should scan the template for {{onevar}} and replace it with the variable's value.
This task involves understanding the nature of reflection when dealing with variables. In the provided code snippet:
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) }
The code attempts to retrieve the variable name by utilizing reflection:
vName := reflect.TypeOf(v).Name()
However, this approach is unsuccessful because a slice contains values, not variables. Therefore, obtaining the variable name from a slice proves impossible.
Solution:
To address this issue, consider using a map instead of a slice, as maps associate keys (variable names) with values:
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) }
The above is the detailed content of How Can I Retrieve Variable Names from Source Code Using Reflection for Templating?. For more information, please follow other related articles on the PHP Chinese website!