将两个 if 条件合二为一
Combining two if conditions into one
以下作品
{{- if hasKey (index $envAll.Values.policy) "type" }}
{{- if has "two-wheeler" (index $envAll.Values.policy "type") }}
<code goes here>
{{- end }}
{{- end }}
而下面的失败 "runtime error: invalid memory address or nil pointer dereference"
{{- if and (hasKey (index $envAll.Values.policy) "type") (has "two-wheeler" (index $envAll.Values.policy "type")) }}
<code goes here>
{{- end}}
在 $envAll.Values.policy 下没有声明名称 "type" 的列表。
在 Go 中,如果有条件地计算右操作数,为什么在第二个代码片段中计算最后一个条件?我该如何解决?
编辑(因为它被标记为重复):
不幸的是,我不能像另一个 post.
中提到的那样使用嵌入式 {{ if }}
我在上面简化了我的问题。我实际上必须实现这一目标...
{{if or (and (condition A) (condition B)) (condition C)) }}
<code goes here>
{{ end }}
你在使用 and
函数时会出错,因为 Go 模板中的 and
函数没有被短路评估(不像 Go 中的 &&
运算符),它的所有总是评估参数。在这里阅读更多相关信息:
因此您必须使用嵌入式 {{if}}
操作,以便仅在第一个参数也为真时才评估第二个参数。
您编辑了问题并声明您的实际问题是这样的:
{{if or (and (condition A) (condition B)) (condition C)) }}
<code goes here>
{{ end }}
这是您只能在模板中执行的方法:
{{ $result := false }}
{{ if (conddition A )}}
{{ if (condition B) }}
{{ $result = true }}
{{ end }}
{{ end }}
{{ if or $result (condition C) }}
<code goes here>
{{ end }}
另一种选择是将该逻辑的结果作为参数传递给模板。
如果在调用模板之前不能或不知道结果,还有一种选择是注册一个自定义函数,然后从模板中调用这个自定义函数,你可以在去代码。有关示例,请参阅 。
以下作品
{{- if hasKey (index $envAll.Values.policy) "type" }}
{{- if has "two-wheeler" (index $envAll.Values.policy "type") }}
<code goes here>
{{- end }}
{{- end }}
而下面的失败 "runtime error: invalid memory address or nil pointer dereference"
{{- if and (hasKey (index $envAll.Values.policy) "type") (has "two-wheeler" (index $envAll.Values.policy "type")) }}
<code goes here>
{{- end}}
在 $envAll.Values.policy 下没有声明名称 "type" 的列表。
在 Go 中,如果有条件地计算右操作数,为什么在第二个代码片段中计算最后一个条件?我该如何解决?
编辑(因为它被标记为重复): 不幸的是,我不能像另一个 post.
中提到的那样使用嵌入式 {{ if }}我在上面简化了我的问题。我实际上必须实现这一目标...
{{if or (and (condition A) (condition B)) (condition C)) }}
<code goes here>
{{ end }}
你在使用 and
函数时会出错,因为 Go 模板中的 and
函数没有被短路评估(不像 Go 中的 &&
运算符),它的所有总是评估参数。在这里阅读更多相关信息:
因此您必须使用嵌入式 {{if}}
操作,以便仅在第一个参数也为真时才评估第二个参数。
您编辑了问题并声明您的实际问题是这样的:
{{if or (and (condition A) (condition B)) (condition C)) }}
<code goes here>
{{ end }}
这是您只能在模板中执行的方法:
{{ $result := false }}
{{ if (conddition A )}}
{{ if (condition B) }}
{{ $result = true }}
{{ end }}
{{ end }}
{{ if or $result (condition C) }}
<code goes here>
{{ end }}
另一种选择是将该逻辑的结果作为参数传递给模板。
如果在调用模板之前不能或不知道结果,还有一种选择是注册一个自定义函数,然后从模板中调用这个自定义函数,你可以在去代码。有关示例,请参阅