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

Go Template 动态获取变量

PHPz
发布: 2024-02-05 23:36:04
转载
1320 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板