如何解决使用 {{if}} 过滤范围时如何抑制 Go 文本/模板输出中的换行符
这个问题与Golang template range newline removal有关,但没有被那里的答案解决。
给定
type Data struct {
Item string
IsFruit bool
}
var data = []Data{
{"banana",true},{"apple",{"onion",false},{"peach",true}}
var Template = `
FRUITS ONLY
-----------------
{{range .}}{{if .IsFruit}}{{.Item}}{{else}}{{end}}
{{end -}}
-----------------
`
使用 Template
执行 data
的输出在 apple
和 peach
之间包含不需要的换行符。
FRUITS ONLY
-----------------
banana
apple
peach
-----------------
我尝试了 {{-
和 -}}
的许多变体,但都没有设法抑制换行符。消除 {{else}}
也不起作用。
请注意,预过滤数据不是我实际应用的选项。
完整代码示例位于 https://goplay.space/#N_GyaWwjH0Y
解决方法
所需的输出,
FRUITS ONLY
-----------------
banana
apple
peach
-----------------
可以通过这样改变模板来获得。
var Template = `
FRUITS ONLY
-----------------
{{range .}}
{{- if .IsFruit}}{{println .Item}}{{end}}
{{- end -}}
-----------------
`
所需的见解是:
- 结束分隔符和结束分隔符之间的换行符很重要,因此需要使用
{{-
来抑制它们。 - 模板
println
函数在其输出中前置一个换行符。这可以防止以下行中的{{-
使用它。
https://goplay.space/#I9LzPaAXMr0 的工作解决方案
IMO,https://pkg.go.dev/text/template 处的文本/模板文档将通过添加上述说明得到改进。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。