如何控制Go templates模板range遍历的输出缩进
Go模板range循环缩进异常解决方案
问题根源
Go模板的空白裁剪规则为:
{{-:裁剪当前标签前方紧邻的所有空白(空格、换行、制表符)-}}:裁剪当前标签后方紧邻的所有空白
原有写法的缩进问题来自两点:
- 第一次外层循环时,range标签后方的
-}}刚好裁掉了job名行首的4个模板排版用缩进空格,但后续循环不会再触发该位置的裁剪逻辑 - 内层遍历steps的end标签没有做对应空白裁剪,导致模板中为了代码可读性写的控制语句行缩进残留到输出中,拼接到下一个job名前方,形成多余的4个空格
修正后的模板代码
核心原则:模板控制语句本身的排版缩进不要泄漏到最终输出,仅给实际需要展示的内容(job名、step名)配置对应缩进,正确写法如下:
{{ range $job, $steps := .jobs -}} {{ $job }}: {{ range $steps -}} {{ . }} {{ end }} {{- end }}
输出效果
渲染后会完全符合预期格式:
job1: step1 step2 job2: step1 step2
内容的提问来源于stack exchange,提问作者Joshua Gilman
相关产品推荐
相关产品推荐

