【发布时间】:2021-08-15 23:21:05
【问题描述】:
所以我正在使用 go 模板,我希望能够通过从模板中获取变量列表来动态生成配置映射。
准确地说,假设我有一个文件名 test.yaml.tmpl,看起来像这样:
car:
color: {{ .color }}
model: {{ .model }}
我希望能够在我的 go 代码中生成一个包含 [color model] 或 [.color .model] 的数组,我可以自己处理这些点。
我查看了不同的选项,但无法得到我想要的结果,我得到的最接近的结果是使用 template.Root.Nodes 提取变量值,但它并不完美,并且可能在特定条件下产生不需要的错误。
有人有一种干净的方法来生成模板变量的数组吗?
编辑 1
我尝试使用树,这给了我这种类型的输出:
&{test.yaml.tmpl test.yaml.tmpl ---
car:
color: {{ .color }}
model: {{ .model }}
0 ---
car:
color: {{ .color }}
model: {{ .model }}
[] <nil> [{8 995 45} {11 409 {{ 22} {0 0 0}] 1 [] map[] 0 0}
问题是我无法访问字段节点,访问树时唯一可用的方法是:
- 错误上下文
- 解析
- 复制及其方法
- 模式
- 姓名
- 解析名称
- Root 和 NodeType 方法
仍然无法获取字段列表。
编辑 2
打印 tree.Root.Nodes 时,我会得到完整的 yaml 输出,其中包含要替换的变量:
(*parse.ActionNode)(0xc00007f1d0)({{ .color }}),
(*parse.TextNode)(0xc00007f200)
【问题讨论】:
-
扫描parse tree 寻找field nodes。
-
我看不到如何访问字段节点,我尝试了 tempalte.Tree 但我无法访问这样的字段节点,你能举个例子吗?
-
好的,我用我得到的和可用的方法进行了编辑。
-
t.Tree.Root.Nodes是根节点的列表。这些节点包含其他节点。 Spew 一个例子 tree 和 methods disabled 来了解树的结构。我没有给出更具体的答案,因为我不记得细节了。
标签: go go-templates