Go Template 动态获取变量

Go Template 动态获取变量

问题内容

我的 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 动态获取变量的详细内容,更多请关注【创想鸟】其它相关文章!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
编程技术

Gorm:如何在字段中存储结构

2025-3-4 21:49:09

编程技术

启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

2025-3-4 21:49:44

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索