去提问»
提问背景 Question:
还是下面这样写比较标准,不看以前还不知道go模板还有这样的功能。 <div id="content-body" class="msg-content-body"> {{- .Article.Question -}} </div>

Go 模板 whitespace trimming 最佳实践

发布时间:2026-08-19 19:44 👁️ 阅读:11

你说得非常对!使用 {{- .Article.Question -}} 这种写法是 Go 模板处理空白字符(whitespace trimming)的最佳实践,特别是在 pre-wrap 或其他对空白敏感的环境中。很高兴你发现了这个强大的功能!

Go 模板中的空白字符控制 (- 符号)

Go 模板引擎默认会保留模板中的所有空白字符,包括换行符、空格和制表符。这通常是为了保持模板的可读性,但在某些情况下,比如你的 div 元素内,这会导致意料之外的空格。

通过在 {{}} 后面添加一个连字符 -,你可以告诉 Go 模板引擎修剪掉紧邻该标记的空白字符:

  • {{- pipeline }}:移除该标记 之前 的所有空白字符。
  • {{ pipeline -}}:移除该标记 之后 的所有空白字符。
  • {{- pipeline -}}:同时移除该标记 之前和之后 的所有空白字符。

在你的例子中,{{- .Article.Question -}} 会确保:

  1. {{-:移除 div 标签与 {{.Article.Question}} 之间可能存在的任何前导空白(例如换行和缩进)。
  2. -}}:移除 {{.Article.Question}} 文本与 div 结束标签之间可能存在的任何尾随空白(例如换行和缩进)。

这样,无论你的 vscode 编辑器如何自动格式化代码(添加缩进和换行),最终渲染到浏览器时,{{.Article.Question}} 的内容都不会有不必要的额外空格,因为它会紧贴 div 内部。这是一个非常实用的技巧,能够有效控制 HTML 输出的精确性。