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

Mik*_*lis 2 go-templates

这个问题与Golang 模板范围换行符删除有关,但那里的答案没有解决。

给定

type Data struct {
    Item    string
    IsFruit bool
}

var data = []Data{
    {"banana", true},
    {"apple", true},
    {"onion", false},
    {"peach", true}}

var Template = `
FRUITS ONLY
-----------------
{{range .}}{{if .IsFruit}}{{.Item}}{{else}}{{end}}
{{end -}}
-----------------
`
Run Code Online (Sandbox Code Playgroud)

Template执行with的输出在和data之间包含不需要的换行符。applepeach

FRUITS ONLY
-----------------
banana
apple

peach
-----------------
Run Code Online (Sandbox Code Playgroud)

我尝试了{{-和的许多变体,但-}}没有设法抑制换行符。消除{{else}}也行不通。

请注意,对于我的实际应用程序来说,预过滤数据不是一个选项。

完整代码示例位于 https://goplay.space/#N_GyaWwjH0Y

Mik*_*lis 5

所需的输出,

FRUITS ONLY
-----------------
banana
apple
peach
-----------------
Run Code Online (Sandbox Code Playgroud)

可以通过改变模板来获得。

FRUITS ONLY
-----------------
banana
apple
peach
-----------------
Run Code Online (Sandbox Code Playgroud)

所需的见解是:

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

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

IMO,https: //pkg.go.dev/text/template上的文本/模板文档将通过添加上述内容的解释来改进。