在Golang模板中包含破折号的变量中的值的范围

时间:2018-01-08 08:17:55

标签: go go-templates

我想在Golang模板中包含破折号的变量下指定值:

data:
  init: |
{{- range .Values.something.something-else.values.list }}
{{ . | indent 4 }}{{ end }}

我已经看到要使用名称为index的函数中的破折号来访问变量值。

我不理解如何将这两个功能结合起来。

1 个答案:

答案 0 :(得分:1)

index函数记录在text/template: Functions section

index
    Returns the result of indexing its first argument by the
    following arguments. Thus "index x 1 2 3" is, in Go syntax,
    x[1][2][3]. Each indexed item must be a map, slice, or array.

使用index:传递您要索引的值,以及索引的值,例如

index . "Values" "something" "something-else" "values" "list"

结合{{range}}操作:

Items:
{{range index . "Values" "something" "something-else" "values" "list"}}
    {{.}},
{{end}}

参见简化的工作示例:

func main() {
    t := template.Must(template.New("").Parse(src))
    m := map[string]interface{}{
        "something": map[string]interface{}{
            "something-else": map[string]interface{}{
                "list": []string{"one", "two", "three"},
            },
        },
    }
    if err := t.Execute(os.Stdout, m); err != nil {
        panic(err)
    }
}

const src = `data:
{{- range index . "something" "something-else" "list" }} {{.}},{{ end }}`

输出(在Go Playground上尝试):

data: one, two, three,