登录
首页 >  Golang >  Go问答

获取动态变量的 Go 模板

来源:stackoverflow

时间:2024-03-02 11:48:23 390浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《获取动态变量的 Go 模板》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我的 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 模板》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>