在 Go 的 text/template
和 html/template
中,{{}}
和 {{- -}}
的主要区别在于对空白字符(空格、换行等)的处理方式:
1. 标准语法 {{ }}
- 保留所有空白字符:模板中的换行符、缩进等会原样输出
- 示例:
{{ if .Condition }}
Hello
{{ end }}
输出结果会保留所有换行和缩进
2. 去除空白语法 {{- -}}
- 去除相邻的空白字符:减号
-
表示去除该侧的空白字符 - 三种形式:
{{- ... }}
:去除左侧空白{{ ... -}}
:去除右侧空白{{- ... -}}
:去除两侧空白
a) 去除左侧空白 ({{-
)
Hello {{- .Name}}
输入:”Hello John” → “HelloJohn”
b) 去除右侧空白 (-}}
)
Hello {{.Name -}}
, welcome!
输入:”John “ → “HelloJohn, welcome!”
c) 去除两侧空白 ({{- -}}
)
Hello {{- .Name -}},
welcome!
输入:” John “ → “HelloJohn,welcome!”
3. HTML模板中的特殊注意事项
在 html/template
中,空白处理更严格:
<ul>
{{- range .Items }}
<li>{{ . }}</li>
{{ end -}}
</ul>
这可以避免生成多余的换行符
⚠️重要区别总结表
{{ }} |
{{- -}} |
|
---|---|---|
作用 | 保留所有空白 | 按需去除指定侧空白 |
场景 | 需要格式化的输出 | 紧凑的输出或HTML优化 |
安全 | html/template自动转义 | html/template同样自动转义 |
实际开发中,通常会在控制结构(if/range/with等)使用带减号的语法来获得更干净的输出。
内容由零声教学AI助手提供,问题来源于学员提问