如果列表项具有 key==value,则从列表中获取值
Get value from list if list-item has key==value
我有以下yaml
items:
- itemName: a
awesome: true
- itemName: b
- itemName: c
awesome: false
我需要一个将 a
作为输出的函数,因为项目 a
具有属性 awesome == true
。 我该怎么做?
无效的方法:
{{- $result := "nope" }}
{{- range $i := $items }}
{{- if and (and (hasKey $i. awesome) ($i.awesome)) !($result -eq "nope") }}
{{- $result := $i.itemName }}
{{- end }}
{{- end }}
没有尝试过上述方法,但我确信这行不通(参见 ). What I'd need is a default function that works for lists. I could not find any in sprig。有什么想法吗?
链接的 ,您声称您知道该代码不起作用,在问题片段中,预先声明变量。
在您的代码中,您确实预先声明了变量,但您犯了不同的错误。错误是您正在使用 :=
将值分配给预先声明的变量,但是模板中的 :=
与 Go 本身的工作方式相同,它初始化一个新变量。您需要使用 =
对现有变量进行赋值。
https://pkg.go.dev/text/template@go1.17.2#hdr-Variables
A pipeline inside an action may initialize a variable to capture the
result. The initialization has syntax
$variable := pipeline
where $variable
is the name of the variable. An
action that declares a variable produces no output.
Variables previously declared can also be assigned, using the syntax
$variable = pipeline
所以你需要做的就是把{{- $result := $i.itemName }}
改成{{- $result = $i.itemName }}
。
{{- $result := "nope" }}
{{- range $i := $items }}
{{- if and (and (hasKey $i. awesome) ($i.awesome)) !($result -eq "nope") }}
{{- $result = $i.itemName }}
{{- end }}
{{- end }}
一个证明这是有效的例子:https://play.golang.org/p/A44yl7jo0v7
我有以下yaml
items:
- itemName: a
awesome: true
- itemName: b
- itemName: c
awesome: false
我需要一个将 a
作为输出的函数,因为项目 a
具有属性 awesome == true
。 我该怎么做?
无效的方法:
{{- $result := "nope" }}
{{- range $i := $items }}
{{- if and (and (hasKey $i. awesome) ($i.awesome)) !($result -eq "nope") }}
{{- $result := $i.itemName }}
{{- end }}
{{- end }}
没有尝试过上述方法,但我确信这行不通(参见
链接的
在您的代码中,您确实预先声明了变量,但您犯了不同的错误。错误是您正在使用 :=
将值分配给预先声明的变量,但是模板中的 :=
与 Go 本身的工作方式相同,它初始化一个新变量。您需要使用 =
对现有变量进行赋值。
https://pkg.go.dev/text/template@go1.17.2#hdr-Variables
A pipeline inside an action may initialize a variable to capture the result. The initialization has syntax
$variable := pipeline
where
$variable
is the name of the variable. An action that declares a variable produces no output.Variables previously declared can also be assigned, using the syntax
$variable = pipeline
所以你需要做的就是把{{- $result := $i.itemName }}
改成{{- $result = $i.itemName }}
。
{{- $result := "nope" }}
{{- range $i := $items }}
{{- if and (and (hasKey $i. awesome) ($i.awesome)) !($result -eq "nope") }}
{{- $result = $i.itemName }}
{{- end }}
{{- end }}
一个证明这是有效的例子:https://play.golang.org/p/A44yl7jo0v7