微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 {{if}} 过滤范围时如何抑制 Go 文本/模板输出中的换行符

如何解决使用 {{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输出applepeach 之间包含不需要的换行符。

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 -}}
-----------------
`

所需的见解是:

  1. 结束分隔符和结束分隔符之间的换行符很重要,因此需要使用 {{- 来抑制它们。
  2. 模板 println 函数在其输出中前置一个换行符。这可以防止以下行中的 {{- 使用它。

https://goplay.space/#I9LzPaAXMr0 的工作解决方案

IMO,https://pkg.go.dev/text/template 处的文本/模板文档将通过添加上述说明得到改进。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。