首页 >后端开发 >Golang >Go Template 动态获取变量

Go Template 动态获取变量

PHPz
PHPz转载
2024-02-05 23:36:041282浏览

Go Template 动态获取变量

问题内容

我的 yml 参数看起来像

nodes: one, two
instanceminone: 1
instancemaxone: 2
instancemintwo: 4
instancemaxtwo: 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: 1
instance-max: 2
instance-min: 4
instance-max: 6

以上是Go Template 动态获取变量的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除