Goテンプレートのトリミング|空白削除の仕組みと実践例

JavaScriptを有効にしてください

まえがき

Goのテンプレートを使うと、データを元に動的なテキストを生成できますが、出力されるテキストに 不要な空白や改行が混ざってしまう ことがあります。
特に、HTMLやメールテンプレートなどを扱う場合、意図しないスペースが入ると見栄えが崩れることも…。

そこで役立つのが トリミング(whitespace trimming) です。
{{--}} を使うことで、無駄な空白を削除し、きれいな出力を作ることができます。

本記事では、Goのテンプレートのトリミングについて解説していきます。

Go言語のテンプレート機能の基本的な使い方については下記記事をお読みください。
Go言語のテンプレート機能を初心者向けに解説

トリミングとは?

テンプレートの出力では、通常 {} の外にある文字や空白はそのまま表示されます。しかし、トリミングを使うと不要な空白を削除する ことができます。

空白文字の定義について

このトリミングにおける空白文字の定義は Go 言語と同じで、スペース ( )、水平タブ (\t)、キャリッジリターン (\r)、改行 (\n) です。

トリミングの基本

Go のテンプレートでは、次のような記号を使うと空白を削除できます。

記号 効果
{{- 直前の空白を削除
-}} 直後の空白を削除

実際の例を見てみよう!

例①: 空白を削除しない場合

まず、普通のテンプレートを考えてみます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package main

import (
	"os"
	"text/template"
)

func main() {
	tmpl := template.Must(template.New("example").Parse("{{23}} < {{45}}"))
	tmpl.Execute(os.Stdout, nil)
}

この場合の出力は:

1
23 < 45

この 2345 の間には スペース があります。

例②: 空白を削除する場合

次に、トリミングを使ってみます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package main

import (
	"os"
	"text/template"
)

func main() {
	tmpl := template.Must(template.New("example").Parse("{{23 -}} < {{- 45}}"))
	tmpl.Execute(os.Stdout, nil)
}

この場合の出力は:

1
23<45

違いは?

  • {{23 -}}23 の後の空白を削除
  • {{- 45}}45 の前の空白を削除

つまり、< の前後のスペースが 削除 されました!

例③: タブや改行を削除する場合

以下は、タブや改行をトリミングする例です。
以下のコードでは、改行やタブなどの余分な空白が、トリミングマーカー ({{--}}) によって削除され、出力結果がスッキリとしています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
	"os"
	"text/template"
)

func main() {
	const tmplText = `
【改行トリミング例】
"Hello,
{{- "World!" -}}
Goodbye."

【タブトリミング例】
BeforeTab: "Start"	{{- "Middle" -}}	AfterTab: "End"
`
	// テンプレートを解析
	tmpl := template.Must(template.New("example").Parse(tmplText))

	// テンプレートを実行して標準出力に書き出す
	tmpl.Execute(os.Stdout, nil)
}
1
2
3
4
5
【改行トリミング例】
"Hello,World!Goodbye."

【タブトリミング例】
BeforeTab: "Start"MiddleAfterTab: "End"
  • 改行トリミング例

    • "Hello," の直後の改行とスペースは、{{- "World!" -}} の左側トリミングによって削除されます。
    • また、"World!" の後にある改行やスペースも右側トリミングにより削除され、結果として "Hello,World!Goodbye." のように余分な空白がなくなります。
  • タブトリミング例

    • "Start""Middle" の間のタブや余分な空白が、同様にトリミングマーカーによって削除され、 "StartMiddleAfterTab: "End" のように出力されます。

トリミングの具体的な使いどころ

  1. 改行や余計なスペースを減らす

    • HTML やテキストを整えるときに便利!
  2. コードをスッキリさせる

    • - を入れるだけで、無駄なスペースを削除できる。

あとがき

Go のテンプレートでは、普通 {} の外にある空白はそのまま表示されますが、- を使うと不要な空白を削除できます。特に、改行やインデントを調整したいときに役立ちます!

覚えておこう!

  • {{- → 直前の空白を削除
  • -}} → 直後の空白を削除

シンプルなルールなので、テンプレートを使うときに試してみてください。


スポンサーリンク

共有

もふもふ

プロフィール

著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア