给出一个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
答案 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" */}}