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

以下错误地为 的值显示“null” 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


我如何让它显示0instead 的价值?


.Value是一个interface{}在问题案例中包含一个int,但可以包含任何内容。


如果对象为 nil,则在模板中显示默认内容;否则,根据设置的属性显示接近但不完全相同的内容


MM们
浏览 113回答 1
1回答

素胚勾勒不出你

我只想创建一个函数,您使用以下方法传递给模板template.Funcs:https://play.golang.org/p/anxW5ooGE7Nfuncs := 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 hitmpl.Execute(os.Stdout, thing{Value: nil})  // outputs [null]tmpl.Execute(os.Stdout, thing{Value: 0})    // outputs 0tmpl.Execute(os.Stdout, thing{Value: 2})    // outputs 2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go