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