【问题标题】:How do I assign variables within a conditional如何在条件中分配变量
【发布时间】:2018-08-22 14:41:01
【问题描述】:

给定一个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-templates


【解决方案1】:

这在 Go 1.10 和更早的版本中是不可能的,模板变量(标识符)不能被修改(有“解决方法”,见下面的链接)。它们可以在 a(n inner) 块中重新声明/隐藏,但是一旦您离开内部块,更改将不可见。有关详细信息和解决方法,请参阅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" */}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多