Go Template 如果值已设置且为 false
Go Template if value is set and is false
我正在使用 Listmonk,它利用了 Go 模板。我有一种情况,用户状态变量 (.Subscriber.Attribs.Pro
) 可能存在(如果存在,它是 true
或 false
。我只想显示一个文本块,如果值存在。
如果设置了 Pro
属性,我的代码就可以工作。但是,如果未设置,它将被处理为 not ''
,从而导致值 true
.
{{ if not .Subscriber.Attribs.Pro }}
You are not a Pro user!
{{ end }}
仅当 Pro
属性明确设置为 false
时,我如何获得此代码 运行
所以基本上您只想在提供 .Subscriber.Attribs.Pro
且 false
时显示文本。所以做个对比:
{{ if eq false .Subscriber.Attribs.Pro }}
You are not a Pro user!
{{ end }}
我们可以这样测试:
t := template.Must(template.New("").Parse("{{ if eq false .Pro }}You are not a Pro user!\n{{ end }}"))
fmt.Println("Doesn't exist:")
if err := t.Execute(os.Stdout, nil); err != nil {
panic(err)
}
fmt.Println("Pro is false:")
m := map[string]interface{}{
"Pro": false,
}
if err := t.Execute(os.Stdout, m); err != nil {
panic(err)
}
fmt.Println("Pro is true:")
m["Pro"] = true
if err := t.Execute(os.Stdout, m); err != nil {
panic(err)
}
输出将是(在 Go Playground 上尝试):
Doesn't exist:
Pro is false:
You are not a Pro user!
Pro is true:
如您所见,{{if}}
块的主体仅在 Pro
明确设置为 false
时才执行。
使用包含的 Sprig hasKey 函数:
{{if hasKey .Subscriber.Attribs "Pro"}}
{{ if not .Subscriber.Attribs.Pro }}
You are not a Pro user!
{{ end }}
{{ end }}
我正在使用 Listmonk,它利用了 Go 模板。我有一种情况,用户状态变量 (.Subscriber.Attribs.Pro
) 可能存在(如果存在,它是 true
或 false
。我只想显示一个文本块,如果值存在。
如果设置了 Pro
属性,我的代码就可以工作。但是,如果未设置,它将被处理为 not ''
,从而导致值 true
.
{{ if not .Subscriber.Attribs.Pro }}
You are not a Pro user!
{{ end }}
仅当 Pro
属性明确设置为 false
所以基本上您只想在提供 .Subscriber.Attribs.Pro
且 false
时显示文本。所以做个对比:
{{ if eq false .Subscriber.Attribs.Pro }}
You are not a Pro user!
{{ end }}
我们可以这样测试:
t := template.Must(template.New("").Parse("{{ if eq false .Pro }}You are not a Pro user!\n{{ end }}"))
fmt.Println("Doesn't exist:")
if err := t.Execute(os.Stdout, nil); err != nil {
panic(err)
}
fmt.Println("Pro is false:")
m := map[string]interface{}{
"Pro": false,
}
if err := t.Execute(os.Stdout, m); err != nil {
panic(err)
}
fmt.Println("Pro is true:")
m["Pro"] = true
if err := t.Execute(os.Stdout, m); err != nil {
panic(err)
}
输出将是(在 Go Playground 上尝试):
Doesn't exist:
Pro is false:
You are not a Pro user!
Pro is true:
如您所见,{{if}}
块的主体仅在 Pro
明确设置为 false
时才执行。
使用包含的 Sprig hasKey 函数:
{{if hasKey .Subscriber.Attribs "Pro"}}
{{ if not .Subscriber.Attribs.Pro }}
You are not a Pro user!
{{ end }}
{{ end }}