我正在尝试转换golang模板,并且如果找不到匹配则允许忽略。这可能吗?
package main
import (
"bytes"
"fmt"
"text/template"
)
type Person struct {
Name string
Age int
}
type Info struct {
Name string
Id int
}
func main() {
msg := "Hello {{ .Id }} With name {{ .Name }}"
p := Person{Name: "John", Age: 24}
i := Info{Name: "none", Id: 5}
t := template.New("My template")
t, _ = t.Parse(msg)
buf := new(bytes.Buffer)
t.Execute(buf, p)
fmt.Println(buf.String())
buf = new(bytes.Buffer)
t.Execute(buf, i)
fmt.Println(buf.String())
}
我想要打印
Hello {{ .Id }} with name John
Hello 5 With name none
答案 0 :(得分:1)
如果您希望它仅在不是空字符串时打印名称:
"Hello {{ .Id }} With name {{ if .Name }}{{ .Name }}{{ end }}"
否则,如果你想打印别的东西:
"Hello {{ .Id }} With name {{ if .Name }}{{ .Name }}{{ else }}none!{{ end }}"
Playground - 另请参阅the comparison operators了解html /模板和文字/模板。
答案 1 :(得分:0)
模板可以包含if语句,允许您执行所需的操作。以下示例允许显示列表(如果提供),或者在未提供时显示消息。
{{if .MyList}}
{{range .MyList}}
{{.}}
{{end}}
{{else}}
There is no list provided.
{{end}}
使用这种方法,我认为你可以实现你所需要的。但它可能并不漂亮,因为您希望保留未处理的{{.Id}}
。