使用go模板生成go模板

使用go模板生成go模板,go,go-templates,Go,Go Templates,我想使用go模板生成类似于{{.Values.something}的内容 但是我不知道我的模板应该是什么样子,例如,我想到了这样一个模板 `"{{.Values."{{ .Value }}"}}"` 并对这个结构执行它 类型值结构{ 值字符串 } 但它不起作用,我也尝试了一些其他组合,但没有运气。有人能帮我弄清楚如何从go模板中获得{{.Values.something}这个输出吗 I.不改变测厚仪 您不能在另一个{{}}操作中嵌入{{}}操作,这就是您尝试的。由于模板中的{和}文本是特殊的

我想使用go模板生成类似于
{{.Values.something}
的内容

但是我不知道我的模板应该是什么样子,例如,我想到了这样一个模板

`"{{.Values."{{ .Value }}"}}"`
并对这个结构执行它

类型值结构{
值字符串
}
但它不起作用,我也尝试了一些其他组合,但没有运气。有人能帮我弄清楚如何从go模板中获得
{{.Values.something}
这个输出吗

I.不改变测厚仪 您不能在另一个
{{}}
操作中嵌入
{{}}
操作,这就是您尝试的。由于模板中的
{
}
文本是特殊的(它们是默认的delimeters),因此必须使用操作将它们作为文本输出,例如

{{ "{{" }}

因此,一个可行的解决方案:

t := template.Must(template.New("").Parse(`{{"{{"}} .Values.{{.Value}} {{"}}"}}`))

buf := &bytes.Buffer{}

params := map[string]interface{}{
    "Value": "Something",
}

if err := t.Execute(buf, params); err != nil {
    panic(err)
}

fmt.Println(buf.String())
这将输出(在上尝试):

当然,您也可以使用此模板通过一个操作输出
{{
.Values

{{"{{.Values."}}{{.Value}}{{"}}"}}
试穿一下

您也可以使用
打印
内置模板功能在一个步骤中完成所有操作:

{{ print "{{.Values." .Value "}}" }}
试一试这个

二、 通过更改默认的delimeter 所有上述模板功夫都是必需的,因为我们使用了一个模板来生成一个模板,这两个模板都使用了相同的delimeters

如果我们更改生成器模板的delimeters,我们的任务就会变得简单得多

例如,如果我们将左右delimeters从(
{{
}}
)更改为(
),那么序列
{{
}
不再特殊,它可以在模板中使用,它们将按原样输出

因此,以下简单模板也可以满足您的需要:

{{ .Values.<<.Value>> }}
{{.Values.}
使用它更改默认delimeters的示例:

t := template.Must(template.New("").
    Delims("<<", ">>").
    Parse(`{{ .Values.<<.Value>> }}`))
t:=template.Must(template.New(“”)。
Delims(“”)。
解析(`{.Values.}}}`)
试一试这个

{{ .Values.<<.Value>> }}
t := template.Must(template.New("").
    Delims("<<", ">>").
    Parse(`{{ .Values.<<.Value>> }}`))