gpt4 book ai didi

go - 重新定义 Go 模板 : sometimes works, 有时会失败

转载 作者:IT王子 更新时间:2023-10-29 02:13:08 25 4
gpt4 key购买 nike

以下 Go 模板过程没有错误:

{{block "A" "hello"}}{{end}}
{{define "A"}}{{.}}{{end}}

输出是“hello”,正如我阅读文档所期望的那样。相反,以下模板不解析:

{{block "A" "hello"}}A{{end}}
{{define "A"}}{{.}}{{end}}

这里我得到了错误信息

template: multiple definition of template "A"

为什么第二个模板出错而第一个模板没有?这种差异是故意的吗?

完整代码在这里:https://play.golang.org/p/CNAqllVLjB

最佳答案

答案就在html/template.Parse() 的文档中:

[...] It is an error if a resulting template is non-empty (contains content other than template definitions) and would replace a non-empty template with the same name. (In multiple calls to Parse with the same receiver template, only one call can contain text other than space, comments, and template definitions.)

您的第一个模板可以工作,因为 {{block "A"}} 定义了一个空模板,因此可以重新定义它。

您的第二个模板失败,因为 {{block "A"}} 定义了一个非空模板,但您尝试使用非空模板重新定义它。

这里要注意一件事:我引用了 html/template 中的文档包,它应该与 text/template “相同” .大多数时候都是这样,但是text/template.Parse()是不同的,并省略了这个重要的细节,但它们的工作方式相同。这是文档不一致,提交了一个可以在此处跟踪的问题:issue #17360 .

关于go - 重新定义 Go 模板 : sometimes works, 有时会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39900463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com