以下错误地显示了0
的值的“空”,但我只希望它精确地显示nil
。
package main
import (
"os"
"text/template"
)
type thing struct {
Value interface{}
}
func main() {
tmpl, _ := template.New("test").Parse("{{if .Value }} {{.Value}} {{else}} [null] {{end}}\n")
tmpl.Execute(os.Stdout, thing{Value: "hi"}) // outputs hi
tmpl.Execute(os.Stdout, thing{Value: nil}) // outputs [null]
tmpl.Execute(os.Stdout, thing{Value: 0}) // outputs [null] - should output 0
tmpl.Execute(os.Stdout, thing{Value: 2}) // outputs 2
}
游乐场链接:https://play.golang.org/p/Gg8uBCOb2vE
如何使它显示0
的值?
.Value
是一个interface{}
,在有问题的情况下,它包含一个int
,但可以包含任何内容。
Show default content in a template if an object is nil otherwise show based on the set property很近,但不太一样
答案 0 :(得分:1)
我只是创建一个使用template.Funcs
传递给模板的函数:
https://play.golang.org/p/anxW5ooGE7N
funcs := make(map[string]interface{})
funcs["isNotNull"] = func(t interface{}) bool {
return t != nil
}
tmpl, _ := template.New("test").Funcs(funcs).Parse("{{if isNotNull .Value }} {{.Value}} {{else}}[null] {{end}}\n")
tmpl.Execute(os.Stdout, thing{Value: "hi"}) // outputs hi
tmpl.Execute(os.Stdout, thing{Value: nil}) // outputs [null]
tmpl.Execute(os.Stdout, thing{Value: 0}) // outputs 0
tmpl.Execute(os.Stdout, thing{Value: 2}) // outputs 2