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

标签 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: "-" 错误。

最佳答案

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

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

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" 时的输出:

Let's say:
Hello, World!

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

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

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

Go Playground 上试试这个.

关于go - 如何避免由条件引起的换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948383/

相关文章:

Javascript,字符串格式 : I need the first 4 letters of a string, 小写,省略空格,删除符号

go - 在 Go 模板范围循环中,是否在每次迭代时重置循环外声明的变量?

Golang 模板 : what is in the context?

loops - 有没有办法遍历整数范围?

algorithm - 间隔和一组间隔之间的区别?

go - 连接 []byte 和哈希

Golang 模板 - 使用模板变量作为范围循环内的全局变量

postgresql - PostgreSQL和Golang之间的数据类型

ios - ObjectiveC 与 iOS 中对 %d 的不同处理

android - 我如何格式化解析并传递给 editText 的数字?