在尝试构建一个用户友好的模板系统时,出现了一个问题:如何获取出现在中的变量名称使用反射的源代码?
目标是创建变量(字符串)切片并迭代它,替换标记{{}} 占位符与实际变量值。例如,如果变量名称是 onevar,系统应该扫描模板中的 {{onevar}} 并将其替换为变量的值。
此任务涉及理解处理变量时反射的本质。在提供的代码片段中:
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) }
代码尝试利用反射来检索变量名称:
vName := reflect.TypeOf(v).Name()
但是,这种方法不成功,因为切片包含值,而不是变量。因此,从切片中获取变量名称是不可能的。
解决方案:
要解决此问题,请考虑使用映射而不是切片,因为映射关联键(变量名称) ) 值为:
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) }
以上是如何使用反射进行模板化从源代码中检索变量名称?的详细内容。更多信息请关注PHP中文网其他相关文章!