在 Go 模板中,如何仅在该值非空时添加带有字符串值的行?

问题描述 投票:0回答:1

我想渲染一个带有包含特定字符串字段的结构的模板,比如带有

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,但我不清楚如何在操作分隔符之前和之后使用减号来实现此目的。

go go-templates
1个回答
0
投票

如果

.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 -}}
© www.soinside.com 2019 - 2024. All rights reserved.