gpt4 book ai didi

go - 用go template生成go模板

转载 作者:行者123 更新时间:2023-12-02 06:14:54 25 4
gpt4 key购买 nike

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

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

`"{{.Values."{{ .Value }}"}}"`

并针对该结构执行它

type values struct {
Value string
}

但它不起作用,我也尝试了一些其他组合,但没有成功。有人可以帮我弄清楚如何从 go 模板中获取 {{ .Values.something }} 这个输出。

最佳答案

我。不改变分隔符

您无法嵌入 {{ }}另一个行动{{ }}行动,这就是你尝试过的。自 {{}}模板中的文字是特殊的(它们是默认分隔符),您必须使用一个操作将它们输出为文字,例如

{{ "{{" }}

还有

{{ "}}" }}

一个可行的解决方案:

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())

此输出(在 Go Playground 上尝试):

{{ .Values.Something }}

当然可以输出{{.Values使用此模板也只需一项操作:

{{"{{.Values."}}{{.Value}}{{"}}"}}

Go Playground 上尝试一下.

您还可以使用print内置模板函数可一步完成所有操作:

{{ print "{{.Values." .Value "}}" }}

Go Playground 上试试这个.

二。更改默认分隔符

所有上述模板功夫都是必需的,因为我们使用模板来生成都使用相同分隔符的模板。

如果我们更改生成器模板的分隔符,我们的任务就会变得更加简单。可以使用 Template.Delims() 更改分隔符方法。

例如,如果我们将左右分隔符从 ( {{ , }} ) 更改为 ( << , >> ),则序列 {{}}不再特殊,它可以在模板中使用,并且它们将按原样输出。

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

{{ .Values.<<.Value>> }}

使用它更改默认分隔符的示例:

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

Go Playground 上试试这个.

关于go - 用go template生成go模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59588692/

25 4 0