如果没有匹配,则忽略Golang模板

时间:2014-07-31 23:09:27

标签: go go-templates

我正在尝试转换golang模板,并且如果找不到匹配则允许忽略。这可能吗?

Playground

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

2 个答案:

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