golang template模版如何判断变量是否存在/指针是否为空
也就是语法{{if .Var}}的含义。
其含义是变量Var是否为真值,判断逻辑根据变量的类型,和golang语言本身判断变量是否为真的逻辑是一样的。
- 数字型:值不等于零
- 字符串:不是空串
- 指针类型:不为空
- 布尔类型:为True值
比较常用的是指针类型是否为空(对于其他基本类型来说,可以通过简单的比较运算来完成),语义上说就是属性是否存在,举个例子来说:
package main
import (
"os"
"log"
"text/template"
)
type Address struct {
City string
Street string
Apt int
}
func main() {
templateText := `
{{if .Address}}
Apt is {{.Address.Apt}}.
{{else}}
Apt is NOT set.
{{end}}
`
t := template.Must(template.New("anyname").Parse(templateText))
templateVar := struct {
Name string
Address * Address
} {
Name: "Tom",
Address: &Address {
City: "Beijing",
Street: "Changanjie",
Apt: 0,
},
}
err := t.Execute(os.Stdout, templateVar)
if err != nil {
log.Println("Executing template:", err)
}
templateVar = struct {
Name string
Address * Address
} {
Name: "Tom",
}
err = t.Execute(os.Stdout, templateVar)
if err != nil {
log.Println("Executing template:", err)
}
}
运行结果就是:
Apt is 0.
Apt is NOT set.
第一个变量设置了Address,而第二个变量的Address为nil,所以就是通过变量{{.Var}}的语法来判定。