golang template模版如何判斷變量是否存在/指針是否為空
也就是語法{{if .Var}}的含義。
其含義是變量Var是否為真值堪置,判斷邏輯根據(jù)變量的類型,和golang語言本身判斷變量是否為真的邏輯是一樣的张惹。
- 數(shù)字型:值不等于零
- 字符串:不是空串
- 指針類型:不為空
- 布爾類型:為True值
比較常用的是指針類型是否為空(對于其他基本類型來說舀锨,可以通過簡單的比較運(yùn)算來完成),語義上說就是屬性是否存在宛逗,舉個例子來說:
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)
}
}
運(yùn)行結(jié)果就是:
Apt is 0.
Apt is NOT set.
第一個變量設(shè)置了Address坎匿,而第二個變量的Address為nil,所以就是通過變量{{.Var}}的語法來判定拧额。