以下错误地为 的值显示“null” 0,但我只希望它完全对 执行此操作nil。package mainimport ( "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我如何让它显示0instead 的价值?.Value是一个interface{}在问题案例中包含一个int,但可以包含任何内容。如果对象为 nil,则在模板中显示默认内容;否则,根据设置的属性显示接近但不完全相同的内容
1 回答
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
我只想创建一个函数,您使用以下方法传递给模板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
- 1 回答
- 0 关注
- 112 浏览
添加回答
举报
0/150
提交
取消