1 回答
TA贡献1936条经验 获得超6个赞
函数的字符串参数可以用双引号"
或反引号括起来。
在模板中用反引号包裹的字符串文字称为原始字符串常量,它们的工作方式类似于Go 源代码中的原始字符串文字:可能包括换行符(并且不能包含转义序列)。
因此,如果您对参数使用反引号,则可能会得到您想要的结果。
例如a.tmpl
:
START
{{ note `a
b\t
c
d`}}
END
加载并执行模板的应用程序:
t := template.Must(template.New("").Funcs(template.FuncMap{
"note": func(s string) string { return "<note>\n" + s + "\n</note>" },
}).ParseFiles("a.tmpl"))
if err := t.ExecuteTemplate(os.Stdout, "a.tmpl", nil); err != nil {
panic(err)
}
这将输出:
START
<note>
a
b\t
c
d
</note>
END
如果您在 Go 源代码中定义模板,则有点棘手,就像您对模板文本使用反引号一样(因为您想编写多行),您不能将反引号嵌入原始字符串文字中。你必须打破文字,并连接反引号。
在 Go 源文件中执行此操作的示例:
func main() {
t := template.Must(template.New("").Funcs(template.FuncMap{
"note": func(s string) string { return "<note>\n" + s + "\n</note>" },
}).Parse(src))
if err := t.Execute(os.Stdout, nil); err != nil {
panic(err)
}
}
const src = `START
{{ note ` + "`" + `a
b\t
c
d` + "`" + `}}
END
`
- 1 回答
- 0 关注
- 80 浏览
添加回答
举报