[已解决] Golang模板中循环修复问题求助
[已解决] Golang模板中循环修复问题求助 你好,
我是Go语言的初学者,正在为不同的类型感到困惑。这是用于Helm模板的。 在我的values.yaml文件中,我的变量结构如下:
receivers:
opencensus:
port: 55678
zipkin:
port: 9411
jaeger:
jaeger-thrift-tchannel-port: 14267
jaeger-thrift-http-port: 14268
exporters:
stackdriver:
project: "vigilant-sol-256207"
enable_tracing: true
我最终需要的结果是这样的:
data:
oc-collector-config: |
receivers:
opencensus:
port: 55678
zipkin:
port: 9411
jaeger:
jaeger-thrift-tchannel-port: 14267
jaeger-thrift-http-port: 14268
exporters:
stackdriver:
project: "vigilant-sol-256207"
enable_tracing: true
这是我目前最接近的尝试:
oc-collector-config: |
receivers:
{{- range $i, $receivers := .Values.receivers }}
{{ $receivers | indent 6 }}
{{ end }}
exporters:
{{- range $i, $exporters := .Values.exporters }}
{{ $exporters | indent 6 }}
{{ end }}
但是它抛出了以下错误:
at <6>: wrong type for value; expected string; got map[string]interface {}
有人能解释一下我在这里做错了什么吗?我已经为此困扰了好几个小时。
非常感谢任何帮助。
诚挚的问候。
更多关于[已解决] Golang模板中循环修复问题求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html
明白了! 这个最终可以工作了:
{{- range $k, $v := .Values.receivers }}
{{ $k | indent 2 }}:
{{- range $k2, $v2 := $v }}
{{ $k2 }}: {{ $v2 }}
{{- end }}
{{- end }}
此致,
更多关于[已解决] Golang模板中循环修复问题求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
好的,又近了一步…… 使用相同的输入和我的模板中的这段代码:
{{- range $k, $v := .Values.receivers }}
{{ $k | indent 2 }}: {{ $v }}
{{ end }}
现在的结果是:
receivers:
jaeger: map[jaeger_thrift_http_port:14268 jaeger_thrift_tchannel_port:14267]
opencensus: map[port:55678]
zipkin: map[port:9411]
但我还在努力处理最后那个 map。 有人能帮我一下吗?
此致,
Eric V.
在Go模板中,当使用indent函数时,它期望接收一个字符串类型的参数,但你传递的是map[string]interface{}类型。你需要将map转换为YAML格式的字符串。可以使用toYaml函数先转换,然后再缩进。
以下是修正后的模板代码:
data:
oc-collector-config: |
receivers:
{{ toYaml .Values.receivers | indent 6 }}
exporters:
{{ toYaml .Values.exporters | indent 6 }}
toYaml函数会将map转换为YAML格式的字符串,然后indent 6会在每一行前添加6个空格的缩进,这样就能得到你期望的格式。
如果你需要更精确的控制每个接收器的缩进,可以使用嵌套的range循环:
data:
oc-collector-config: |
receivers:
{{- range $key, $value := .Values.receivers }}
{{ $key }}:
{{ toYaml $value | indent 8 }}
{{- end }}
exporters:
{{- range $key, $value := .Values.exporters }}
{{ $key }}:
{{ toYaml $value | indent 8 }}
{{- end }}
这个版本会为每个接收器和导出器名称添加额外的缩进层级,使YAML结构更加清晰。

