控制 Go 模板中的缩进
Controlling indents in Go templates
我有以下 Go 模板:
{{ range $job, $steps := .jobs -}}
{{ $job -}}:
{{ range $steps -}}
{{ . }}
{{ end }}
{{- end }}
它正在生成如下所示的输出:
job1:
step1
step2
job2: <--- This should not be indented
step1
step2
job1
之后的所有作业都缩进四个空格。我不清楚为什么模板引擎会决定任意缩进剩余的作业。如何控制缩进以便输出显示为:
job1:
step1
step2
job2:
step1
step2
job2
的标识并非来自您认为的地方:它来自打印步骤之间的空格和换行符:
{{ range $steps -}}
{{ . }} <-- starting from here, and the indentation of the next line
{{ end }}
所以输出job1
的step2
后的换行符和缩进,然后你就开始job2
:已经缩进了。
如果您只在输出中需要的位置插入换行符和缩进,您会得到想要的结果:
{{ range $job, $steps := .jobs}}{{ $job }}:{{ range $steps }}
{{ . }}{{ end }}
{{ end }}
或者按照你想要的方式格式化你的模板,并在所有地方禁用缩进,并在你想要的地方显式输出换行符和缩进:
{{ range $job, $steps := .jobs -}}
{{- $job -}}:{{"\n"}}
{{- range $steps -}}
{{" "}}{{- . -}}{{"\n"}}
{{- end -}}
{{- end }}
或第三种解决方案:
{{ range $job, $steps := .jobs -}}
{{ $job }}:
{{- range $steps }}
{{ . }}{{ end }}
{{ end }}
这些都是输出(在Go Playground上试试):
job1:
step1
step2
job2:
step1
step2
我有以下 Go 模板:
{{ range $job, $steps := .jobs -}}
{{ $job -}}:
{{ range $steps -}}
{{ . }}
{{ end }}
{{- end }}
它正在生成如下所示的输出:
job1:
step1
step2
job2: <--- This should not be indented
step1
step2
job1
之后的所有作业都缩进四个空格。我不清楚为什么模板引擎会决定任意缩进剩余的作业。如何控制缩进以便输出显示为:
job1:
step1
step2
job2:
step1
step2
job2
的标识并非来自您认为的地方:它来自打印步骤之间的空格和换行符:
{{ range $steps -}}
{{ . }} <-- starting from here, and the indentation of the next line
{{ end }}
所以输出job1
的step2
后的换行符和缩进,然后你就开始job2
:已经缩进了。
如果您只在输出中需要的位置插入换行符和缩进,您会得到想要的结果:
{{ range $job, $steps := .jobs}}{{ $job }}:{{ range $steps }}
{{ . }}{{ end }}
{{ end }}
或者按照你想要的方式格式化你的模板,并在所有地方禁用缩进,并在你想要的地方显式输出换行符和缩进:
{{ range $job, $steps := .jobs -}}
{{- $job -}}:{{"\n"}}
{{- range $steps -}}
{{" "}}{{- . -}}{{"\n"}}
{{- end -}}
{{- end }}
或第三种解决方案:
{{ range $job, $steps := .jobs -}}
{{ $job }}:
{{- range $steps }}
{{ . }}{{ end }}
{{ end }}
这些都是输出(在Go Playground上试试):
job1:
step1
step2
job2:
step1
step2