首頁  >  文章  >  後端開發  >  Go Template 動態取得變數

Go Template 動態取得變數

PHPz
PHPz轉載
2024-02-05 23:36:041240瀏覽

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刪除