如何在条件中分配变量

How do I assign variables within a conditional

给定 YAML 文件和 go 模板,我可以使用以下方法分配变量:

{{ $foo := "bar" }}

我可以使用如下条件:

{{ if eq $foo "bar" }} jim {{ else }} bob {{ end }}

如何将两者结合起来将条件的结果赋值给变量?

我试过:

{{ $foo := "bar" }}

{{ if eq $foo "bar" }}
{{ $foo = "jim" }} 
{{ else }}
{{ $foo = "bob" }}
{{ end }}

但是foo仍然是bar

Go 1.10及更早版本无法做到这一点,模板变量(标识符)无法修改(有"workarounds",见下文link)。它们可以在 (n inner) 块中重新声明/隐藏,但是一旦您离开内部块,更改将不可见。有关详细信息和解决方法,请参阅

请注意,Go 1.11 即将发布 which will support this

这将是从 Go 1.11 开始的有效且有效的模板代码:

{{ $v := "init" }}
{{ if true }}
  {{ $v = "changed" }}
{{ end }}
v: {{ $v }} {{/* "changed" */}}