17

在我的模板中,我想包含一些默认meta标签(90% 的时间)。但是,当设置特定属性时,我想显示一组不同的文本。

我知道我可以设置匿名struct并使用"default"或设置属性"some-x"。但是,这意味着,我需要将一个匿名结构添加到我当前刚刚通过的 90% 的处理程序中nil

有没有办法做类似的事情

{{if eq . nil}} 
   // default meta tag
{{else if eq .MetaValue "some-x"}} 
   //other
{{end}}

如果我尝试类似上面的代码,它会编译但不会做我想要的。感谢有关如何在不添加大量样板的情况下正确处理它的任何建议。

谢谢!

4

3 回答 3

21
{{if not .}}
   output when . is nil or otherwise empty including
     false, 0, and any array, slice, map, or string of length zero
{{else if eq .MetaValue "some-x"}}
       // some-x case
{{else}} 
       // other case
{{end}}
于 2015-09-25T05:08:16.127 回答
9

如果您想确保您只检查nil而不是0, false、空字符串或任何其他虚假类型,您可以使用kindIs函数来完成此操作。

{{ if kindIs "invalid" . }} 
   // only if variable is literally nil. falsey values will fallthrough.
{{ else if eq .MetaValue "some-x" }} 
   // other
{{ else }}
   // final case, if any
{{ end }}
于 2020-07-02T21:17:29.050 回答
4

我最近遇到了在 Helm Chart(它使用 Go 模板,包括sprig)中识别 nil 与 0 值的问题,并且没有找到任何发布的解决方案,所以我想我会在这里添加我的解决方案。

我想出了一种丑陋的解决方案,即引用该值,然后检查与 "<nil>" 匹配的字符串(带引号,因此您实际上是在检查 (quote .Values.thing | eq "\" <无>\""))。这允许区分针对空值和定义的 0 值的测试。就我而言,我试图构建一个配置文件,其中一些默认选项为非 0,因此当显式设置 0 时,我想知道设置了 0 而不是省略。

希望这可以对其他人有所帮助。

有更好的方法来做到这一点会很好,但到目前为止,我还没有找到任何不需要创建和添加我自己的模板函数的东西。

于 2018-04-25T22:07:03.523 回答