如何避免由条件引起的换行?

How to avoid newlines caused by conditionals?

鉴于此 Go text/template 代码:

Let's say:
{{ if eq .Foo "foo" }}
Hello, Whosebug!
{{ else if eq .Foo "bar" }}
Hello, World!
{{ end }}

如果 Foo 等于 "foo":

,我们将得到以下输出
Let's say:

Hello, Whosebug!

(后跟一个换行符)

有没有办法去掉多余的换行符?

我希望这可以使用 {{--}} 语法来完成:

Let's say:
{{- if eq .Foo "foo" }}
Hello, Whosebug!
{{- else if eq .Foo "bar" }}
Hello, World!
{{- end }}

但是,这会产生 illegal number syntax: "-" 错误。

有一个新行,因为您要在冒号 (:) 后添加一个新行

这个有效https://play.golang.org/p/k4lazGhE-r 请注意,我只是在第一个冒号

之后开始第一个 if

在你的第一个模板中,在静态文本 "Let's say:" 之后有一个换行符,第二行只包含 {{if}} 动作,它还包含一个换行符,它的正文 "Hello, Whosebug!" 从第 3 行开始。如果呈现此内容,则 2 个静态文本之间将有 2 个换行符,因此您会看到一个空行(如您发布的那样)。

您可以使用 {{- if... 去掉第一个换行符,因此在渲染时,只有一个换行符到达输出,导致 2 个不同的行,但它们之间没有换行符:

Let's say:
{{- if eq .Foo "foo" }}
Hello, Whosebug!
{{- else if eq .Foo "bar" }}
Hello, World!
{{- end }}

Foo"foo"时的输出:

Let's say:
Hello, Whosebug!

Foo"bar"时的输出:

Let's say:
Hello, World!

Go Playground 上试用。

请注意,这是在 Go 1.6: Template, and is documented at text/template: Text and Spaces 中添加的。

如果你在动作结束时使用-符号-}},你甚至可以删除所有的换行符:

Let's say:
{{- if eq .Foo "foo" -}}
Hello, Whosebug!
{{- else if eq .Foo "bar" -}}
Hello, World!
{{- end -}}

Foo"foo"Foo"bar"时的输出:

Let's say:Hello, Whosebug!
Let's say:Hello, World!

Go Playground 上试试这个。