为了账号安全,请及时绑定邮箱和手机立即绑定

如果 nil 块,如何防止非 nil 值触发 golang 模板

如果 nil 块,如何防止非 nil 值触发 golang 模板

Go
MM们 2023-06-05 17:33:39
以下错误地为 的值显示“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


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信