如何避免有条件的换行?

tmh*_*tmh 5 formatting go go-templates

给出以下Go文本/模板代码:

Let's say:
{{ if eq .Foo "foo" }}
Hello, StackOverflow!
{{ else if eq .Foo "bar" }}
Hello, World!
{{ end }}
Run Code Online (Sandbox Code Playgroud)

Foo等于的情况下,我们得到以下输出"foo"

Let's say:

Hello, StackOverflow!
Run Code Online (Sandbox Code Playgroud)

(后跟换行符)

有没有办法摆脱多余的换行符?

我希望可以使用{{-and -}}语法完成此操作:

Let's say:
{{- if eq .Foo "foo" }}
Hello, StackOverflow!
{{- else if eq .Foo "bar" }}
Hello, World!
{{- end }}
Run Code Online (Sandbox Code Playgroud)

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

icz*_*cza 5

在您的第一个模板中,静态文本之后有一个换行符"Let's say:",第二行仅包含{{if}}动作,并且还包含一个换行符,其主体"Hello, StackOverflow!"从第三行开始。如果渲染了该文本,则2个静态文本之间将有2个换行符,因此您将看到一个空行(如您所发布的)。

您可能会使用它{{- if...来摆脱第一条换行符,因此在呈现时,只有一条换行符到达输出,从而导致2条不同的行,但它们之间没有换行符:

Let's say:
{{- if eq .Foo "foo" }}
Hello, StackOverflow!
{{- else if eq .Foo "bar" }}
Hello, World!
{{- end }}
Run Code Online (Sandbox Code Playgroud)

输出时Foo"foo"

Let's say:
Hello, StackOverflow!
Run Code Online (Sandbox Code Playgroud)

输出时Foo"bar"

Let's say:
Hello, World!
Run Code Online (Sandbox Code Playgroud)

Go Playground上尝试一下。

请注意,这已添加到Go 1.6:Template中,并记录在text/template:Text and Spaces中

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

Let's say:
{{- if eq .Foo "foo" -}}
Hello, StackOverflow!
{{- else if eq .Foo "bar" -}}
Hello, World!
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

输出Foois "foo"Foois的时间"bar"

Let's say:Hello, StackOverflow!
Let's say:Hello, World!
Run Code Online (Sandbox Code Playgroud)

Go Playground上尝试一下。