当前位置: 首页 > 面试题库 >

去模板和功能

冷越泽
2023-03-14
问题内容

在我去的代码,我经常用if这样的

if user && user.Registered { }

Go模板中的等效代码将是

{{ if and .User .User.Registered }} {{ end }}

不幸的是在模板代码失败,如果.Usernil:/

在go模板中是否可以实现相同的目的?


问题答案:

模板and功能不像Go 操作符那样进行短路评估&&

在调用and函数之前先评估函数的参数。.User.Registered即使.User为nil ,也总是对表达式求值。

解决方法是使用嵌套if

 {{if .User}}{{if .User.Registered}}  {{end}}{{end}}

您可以避免嵌套ifwith使用模板函数:

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))

游乐场的例子



 类似资料:
  • 问题内容: 当我尝试使用和时,它注意到Go模板很奇怪。以下代码按预期工作: 但是,当我尝试将模板放在文件中时,它不起作用(说:): 使用template.html: 知道为什么吗?这是一个错误吗?有没有更简单的方法在模板中使用方法/功能? 问题答案: ParseFiles可能会使用更好的文档。一个模板对象可以包含多个模板,每个模板都有一个名称。如果查看ParseFiles的实现,则会看到它使用 文

  • 问题内容: 使用我正在尝试在模板中使用自己的功能之一。不幸的是,我无法使用go模板的功能映射功能。我得到的只是以下错误: 简化的测试用例如下所示(): 我有以下简单模板(): 这是1.1.1。 问题答案: IIRC,必须在解析模板之前定义模板功能图。下面的代码似乎有效。

  • 问题内容: 我知道在模板中我可以调用以表达式命名的函数,例如。但是如何为表达式命名函数呢? 问题答案: 您总是可以定义这样的功能:

  • 主要模板文件与功能说明: DedeCMS系统的模板是非固定的,用户可以在新建栏目时可以自行选择栏目模板,官方仅提供最基本的默认模板,即是内置系统模型的各个模板,由于DedeCMS支持自定义频道模型,用户自定义新频道模型后,还需要按该模型的字段设计一套新的模板,此外,DedeCMS也支持使用风格的形式使用模板,默认风格是 default,它表示系统默认使用 {cmspath}/templets/de

  • 问题内容: 因此,我正在做一个简单的if检查结构中的布尔变量,但似乎不起作用,只是停止呈现HTML。 所以下面的结构是这样的: 现在,我可以显示一个带有类别的Category结构。 贝娄是一个结构的例子: 我已经尝试了多种方法,如下所示,但是它们都不起作用: 问题答案: 您必须从模板导出要访问的所有字段:将其首字母更改为大写: 以及每个引用: 每个未导出的字段只能从声明包中访问。您的软件包声明类型

  • 本文向大家介绍laravel 5 实现模板主题功能,包括了laravel 5 实现模板主题功能的使用技巧和注意事项,需要的朋友参考一下 众所周知,laravel渲染模板是通过View::make()实现的,需要显式指定模板文件路径: 既然这样,我们就可以自己实现模板主题功能,我们只需要将模板文件放到一个主题名称对应的目录里就行,比如默认主题为 default 的话,我们就这样写: 自定义主题 cu