3

我正在尝试转换 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

4

2 回答 2

1

如果您希望它仅在 name 不是空字符串时打印:

"Hello {{ .Id }} With name {{ if .Name }}{{ .Name }}{{ end }}"

否则,如果您想打印其他内容:

"Hello {{ .Id }} With name {{ if .Name }}{{ .Name }}{{ else }}none!{{ end }}"

Playground - 另请参阅html/template 和 text/template的比较运算符

于 2014-08-01T00:01:51.537 回答
0

模板可以包含 if 语句,这些语句允许您执行所需的操作。以下示例允许在提供时显示列表,或者在未提供时显示消息。

    {{if .MyList}}
      {{range .MyList}}
        {{.}}
      {{end}}
    {{else}}
      There is no list provided.
    {{end}}

使用这种方法,我认为你可以实现你所需要的。但这可能并不漂亮,因为您想将未处理的内容留{{.Id}}在原处。

于 2014-08-01T00:04:00.767 回答