猿问

如果对象为零则显示模板中的默认内容,否则根据设置的属性显示

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


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


有没有办法做类似的事情


{{if eq . nil}} 

   // default meta tag

{{else if eq .MetaValue "some-x"}} 

   //other

{{end}}

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


慕仙森
浏览 218回答 3
3回答

当年话下

{{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}}

白衣非少年

如果您想确保您只检查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 }}

富国沪深

我最近遇到了在 Helm Chart(使用 Go 模板,包括sprig)中识别 nil 与 0 值的问题,并且没有找到任何已发布的解决方案,所以我想我会在这里添加我的。我想出了一种丑陋的解决方案,即引用该值,然后检查与“<nil>”匹配的字符串(带引号,因此您实际上是在检查 (quote .Values.thing | eq "\" <nil>\""))。这允许区分针对空值和定义的 0 值的测试。在我的例子中,我试图构建一个配置文件,其中一些默认选项不是 0,所以当 0 被显式设置时,我想知道 0 被设置而不是被省略。希望这可以对其他人有所帮助。有更好的方法来做到这一点会很好,但到目前为止我还没有发现任何不需要创建和添加我自己的模板函数的东西。
随时随地看视频慕课网APP

相关分类

Go
我要回答