Go模板缩进与文本格式化优化方案咨询
Go模板缩进可读性与输出冗余问题解决
问题场景
使用带缩进格式的Go模板时,渲染输出会出现多余空行和缩进;只有把模板写成紧凑格式才能得到期望输出,但这种写法可读性极差。尝试{{- }}语法后效果不佳,希望找到既能保持模板缩进可读性,又能避免输出冗余的方法,同时想知道Go模板是否内置后处理器。
原模板示例
{{ range $item := . }} {{ if $item.IsA}} Ok {{ else }} Fine {{ end }} {{ end }} Done!
渲染代码
t := template.New("test").Parse(_types) text, err := t.Execute(&buffer, strct)
问题输出
Ok Done!
期望输出
Ok Done!
解决方案
1. 正确使用{{- }}和-}}修剪空白
Go模板的{{-和-}}语法用于修剪标签左侧或右侧的空白字符(包括换行、空格、制表符),合理添加就能在保留模板缩进可读性的同时消除输出冗余。
修正后的模板示例:
{{- range $item := . -}} {{- if $item.IsA -}} Ok {{- else -}} Fine {{- end -}} {{- end }} Done!
{{- range ... -}}:修剪range标签前后的空白,避免生成多余空行{{- if ... -}}:修剪if标签前后的空白,消除条件判断带来的缩进空格- 无需额外添加
{{- "How many spaces??" -}}这类冗余代码,直接在逻辑控制标签上添加修剪符号即可。
2. 关于内置后处理器
Go标准库的text/template和html/template没有内置后处理器自动清理输出中的多余空白,所有空白控制都需要通过模板标签的修剪语法手动实现。
内容的提问来源于stack exchange,提问作者Arnold Zahrneinder
相关产品推荐
相关产品推荐

