Helm模板变量作用域问题:if块外无法识别变量
解决Helm模板中变量作用域问题
这是Go模板(Helm基于Go模板实现)的作用域特性导致的:用:=声明的变量仅在当前代码块(这里的if/else分支)内有效,外部无法访问。
解决方法很简单,先在if块外部初始化变量,再在分支内用=赋值(而非:=,因为变量已经声明过):
{{- /* 先在外部作用域声明并初始化变量,确保后续代码能访问 */ -}} {{- $var1 := "" -}} {{- $var2 := "" -}} {{- if eq $.Values.value "6" -}} {{- $var1 = (toString $.Values.something6) -}} {{- $var2 = (toString $.Values.somethingelse6) -}} {{- else if eq $.Values.value "7" -}} {{- $var1 = (toString $.Values.something7) -}} {{- $var2 = (toString $.Values.somethingelse7) -}} {{- end }} ... ... (同一文件中) {{- ..... | replace "Placeholder1" $var1 | replace "Placeholder2" $var2 }}
原理::=用于声明新变量,作用域仅限当前代码块;而=是给已声明的变量赋值,变量的作用域由首次声明的位置决定。提前在外部声明变量后,所有后续代码都能访问到它。
内容的提问来源于stack exchange,提问作者Ron Shvarz
相关产品推荐
相关产品推荐

