要实现你想要的,你必须解决两项任务:
对于串联,您可以使用内置print
函数,例如
{{ $key := print "instanceMin" $nodeName }}
要编制索引,请使用内置的index
函数:
instance-min: {{ index $.Parameters $key }}
(注意:{{range}}
操作更改点,因此在它内部需要$
才能在循环变量外部引用.)
或者用一句话:
instance-min: {{ index $.Parameters (print "instanceMin" $nodeName) }}
查看可运行的演示:
func main() {
t := template.Must(template.New("").Parse(src))
params := map[string]any{
"Parameters": map[string]any{
"nodes": []string{"One", "Two"},
"instanceMinOne": 1,
"instanceMaxOne": 2,
"instanceMinTwo": 4,
"instanceMaxTwo": 6,
},
}
if err := t.Execute(os.Stdout, params); err != nil {
panic(err)
}
}
const src = `{{- range $idx, $nodeName := .Parameters.nodes }}
instance-min: {{ index $.Parameters (print "instanceMin" $nodeName) }}
instance-max: {{ index $.Parameters (print "instanceMax" $nodeName) }}
{{- end }}`
这将输出(在Go Playground上试用):
instance-min: 1
instance-max: 2
instance-min: 4
instance-max: 6