为了账号安全,请及时绑定邮箱和手机立即绑定

控制 Go 模板中的缩进

控制 Go 模板中的缩进

Go
绝地无双 2022-12-19 11:46:34
我有以下 Go 模板:{{ range $job, $steps := .jobs -}}    {{ $job -}}:    {{ range $steps -}}        {{ . }}    {{ end }}{{- end }}它产生如下所示的输出:job1:    step1    step2    job2:  <--- This should not be indented    step1    step2之后的所有作业job1都缩进四个空格。我不清楚为什么模板引擎会决定任意缩进剩余的作业。如何控制缩进以便输出显示如下:job1:    step1    step2job2:    step1    step2
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

job2的标识并非来自您认为的地方:它来自打印步骤之间的空格和换行符:


{{ range $steps -}}

   {{ . }}  <-- starting from here, and the indentation of the next line

{{ end }}

所以输出换行符和of之后的缩进step2,job1然后你就从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


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信