如何在条件中分配变量

时间:2018-08-22 14:41:01

标签: go-templates

给出一个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

1 个答案:

答案 0 :(得分:4)

这在Go 1.10和更早版本中是不可能的,模板变量(标识符)无法修改(有“替代方法”,请参见以下链接)。可以在(n个内部)块中将它们重新声明/阴影化,但是一旦退出内部块,更改将不可见。有关详细信息和解决方法,请参见In a Go template range loop, are variables declared outside the loop reset on each iteration?

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

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

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