在我的代码中,我经常使用if这样的代码
if user && user.Registered { }
Run Code Online (Sandbox Code Playgroud)
go模板中的等效代码将是
{{ if and .User .User.Registered }} {{ end }}
Run Code Online (Sandbox Code Playgroud)
不幸的是,模板中的代码失败了,如果.User是nil:/
是否有可能在go模板中实现相同的功能?
Cer*_*món 11
模板and功能不像Go 操作员那样进行短路评估&&.
在调用and函数之前计算函数的参数..User.Registered即使.User是零,也始终评估表达式.
修复是使用嵌套的if:
{{if .User}}{{if .User.Registered}} {{end}}{{end}}
Run Code Online (Sandbox Code Playgroud)
您可以避免嵌套if或with使用模板函数:
func isRegistered(u *user) bool {
return u != nil && u.Registered
}
const tmpl = `{{if isRegistered .User}}registered{{else}}not registered{{end}}`
t := template.Must(template.New("").Funcs(template.FuncMap{"isRegistered": isRegistered}).Parse(tmpl))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1793 次 |
| 最近记录: |