我想渲染一个带有包含特定字符串字段的结构的模板,比如带有
Restaurant
的 Name
,这样如果 Name
非空,它会打印在一行上,但是如果它是空的,那条线不存在。到目前为止,我已经尝试过了
package main
import (
"os"
"text/template"
)
type Restaurant struct {
Name string
}
func main() {
tmpl, err := template.New("test").Parse(`The restaurant is:
{{if .Name }}{{.Name}}{{ end }}
The end.
`)
if err != nil {
panic(err)
}
if err := tmpl.Execute(os.Stdout, Restaurant{Name: ""}); err != nil {
panic(err)
}
}
此打印
The restaurant is:
The end.
但是,我希望在这种情况下省略中间的空行:
The restaurant is:
The end.
但是,当名称非空时,我希望该行存在:如果我在
Restaurant{Name: "Itria"}
参数中使用 tmpl.Execute
,则输出应该是
The restaurant is:
Itria
The end.
我已阅读https://pkg.go.dev/text/template#hdr-Text_and_spaces,但我不清楚如何在操作分隔符之前和之后使用减号来实现此目的。
如果
.Name
不为空,您希望有条件地呈现换行符。因此,在 {{if}}
块内移动一个换行符,并且不要在 {{if}}
块之后渲染换行符(在 Go Playground 上尝试一下):
tmpl, err := template.New("test").Parse(`The restaurant is:
{{if .Name }}{{.Name}}
{{ end}}The end.
`)
或另一种解决方案(在 Go Playground 上尝试这个):
tmpl, err := template.New("test").Parse(`The restaurant is:
{{if .Name }}{{.Name}}
{{ end -}}