问题内容
我的 yml 参数看起来像
nodes: one, twoinstanceminone: 1instancemaxone: 2instancemintwo: 4instancemaxtwo: 6
登录后复制
有没有一种方法可以使用go模板动态读取例如instanceminone,其中变量名称由instancemin +来自节点列表的动态值组成?
类似的东西(这显然不起作用,但只是给出了我想要实现的目标的想法)
{{ - range $nodeName := (split .Parameters.nodes) } } } } instance-min: {{ .Parameters.instanceMin$nodeName }} instance-max: {{ .Parameters.instanceMan$nodeName }}{{ - end }}
登录后复制
正确答案
要实现您想要的目标,您必须解决 2 个任务:
字符串连接使用动态值建立索引
对于连接,您可以使用内置的 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: 1instance-max: 2instance-min: 4instance-max: 6
登录后复制
以上就是Go Template 动态获取变量的详细内容,更多请关注【创想鸟】其它相关文章!