在我的模板中,我想包含一些默认的meta
标记(90%的时间)。但是,当设置了特定属性时,我想显示一组不同的文本。
我知道我可以设置匿名struct
并使用"default"
或"some-x"
设置属性。但是,这意味着,我需要向目前通过nil
的90%的处理程序添加一个匿名结构。
有没有办法做类似
的事情{{if eq . nil}}
// default meta tag
{{else if eq .MetaValue "some-x"}}
//other
{{end}}
如果我尝试上面代码之类的东西,它会编译,但不会做我想要的。感谢任何有关如何正确处理它的建议,而无需添加大量锅炉板。
谢谢!
答案 0 :(得分:8)
{{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}}
答案 1 :(得分:4)
我最近遇到了一个问题,即在Helm Chart(使用Go模板,包括sprig)中识别nil vs 0值并且没有找到任何解决方案,所以我想我会添加我的。
我提出了一种丑陋的解决方案,引用该值,然后检查匹配“< nil>”的字符串(带引号,所以你实际上要检查(引用.Values.thing | eq“\”< nil> \“”))。这允许区分测试与空值和定义的0值。在我的情况下,我试图构建一个配置文件,其中一些默认选项是非0,所以当显式设置0时,我想知道0被设置而不是仅仅被省略。
希望这可以帮助其他人。
有一个更好的方法来做到这一点会很好,但到目前为止,我还没有找到任何不需要创建和添加我自己的模板函数的东西。
答案 2 :(得分:1)
如果要确保只检查nil
,而不检查0
,false
,空字符串或任何其他错误类型,则可以使用{{3} }来做到这一点。
{{ 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 }}