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

时间:2016-10-09 20:48:37

标签: go formatting go-templates

鉴于此Go文本/模板代码:

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

如果Foo等于"foo",我们会得到以下输出:

Let's say:

Hello, StackOverflow!

(后跟换行符)

有没有办法摆脱额外的换行线?

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

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

然而,这会产生illegal number syntax: "-"错误。

2 个答案:

答案 0 :(得分:4)

在第一个模板中,静态文本"Let's say:"后面有换行符,第二行只包含{{if}}操作,并且还包含换行符及其正文{{1} }从第3行开始。如果这是渲染,则2个静态文本之间将有2个换行符,因此您将看到一个空行(如您发布的那样)。

您可以使用"Hello, StackOverflow!"删除第一个换行符,因此在渲染时,只有1个换行符到达输出,导致2个不同的行但它们之间没有换行符:

{{- if...

Let's say: {{- if eq .Foo "foo" }} Hello, StackOverflow! {{- else if eq .Foo "bar" }} Hello, World! {{- end }} Foo时的输出:

"foo"

Let's say: Hello, StackOverflow! Foo时的输出:

"bar"

Go Playground上尝试。

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

如果您在操作Let's say: Hello, World! 结束时使用-符号,则甚至可以删除所有换行符:

-}}

Let's say: {{- if eq .Foo "foo" -}} Hello, StackOverflow! {{- else if eq .Foo "bar" -}} Hello, World! {{- end -}} Foo"foo"Foo时的输出:

"bar"

Go Playground上试试这个。

答案 1 :(得分:0)

有一个新行,因为你在冒号(:)

之后添加了一个新行

这有效https://play.golang.org/p/k4lazGhE-r 注意我只是在第一个冒号之后开始第一个 if