まえがき
Go言語のテンプレート機能は、HTMLやテキストファイルを動的に生成する際に非常に便利な機能です。その中でも特に重要なのが条件分岐を行う「if文」です。今回は初心者の方向けに、Go言語テンプレートのif文の基本的な使い方から、andやorを使った複数条件の指定方法まで、わかりやすく解説していきます。
Go言語のテンプレート機能の基本的な使い方については下記記事をお読みください。
Go言語のテンプレート機能を初心者向けに解説
サンプル内で使用している{{-や-}}は、テンプレート内の空白を制御するための記法です。
初めて見る方は少し分かりにくいかもしれませんが、仕組み自体はシンプルです。
詳しくは以下の記事をご覧ください。
Goテンプレートのトリミング|空白削除の仕組みと実践例
Goテンプレートのif文の基本的な使い方
Go言語のテンプレートでif文を使うには、以下のような構文を使います。
{{ if 条件式 }}
条件が真(true)の場合に表示される内容
{{ else }}
条件が偽(false)の場合に表示される内容
{{ end }}
例えば、テンプレートに渡した変数が空でない場合にのみ表示する場合は以下のようになります。
package main
import (
"os"
"text/template"
)
func main() {
tmpl := template.Must(template.New("example").Parse(`
{{- if .Name -}}
こんにちは、{{ .Name }}さん!
{{- else -}}
名前が設定されていません。
{{- end -}}
`))
tmpl.Execute(os.Stdout, map[string]string{"Name": "もふもふ"})
}
実行すると以下のようになります。
こんにちは、もふもふさん!
もしNameが空の場合は以下のようになります。
tmpl.Execute(os.Stdout, map[string]string{"Name": ""})
名前が設定されていません。
andやorを使った複数条件の指定方法
Goテンプレートでは、複数の条件を組み合わせるためにandやorを使うことができます。
andの使い方
andは複数の条件がすべて真の場合にのみ真となります。
{{- if and .IsMember .HasCoupon -}}
会員かつクーポンをお持ちの方限定の特典です!
{{- else -}}
特典を受け取る条件を満たしていません。
{{- end -}}
tmpl.Execute(os.Stdout, map[string]bool{"IsMember": true, "HasCoupon": true})
会員かつクーポンをお持ちの方限定の特典です!
orの使い方
orは複数の条件のうち、どれか一つでも真であれば真となります。
{{- if or .IsAdmin .IsModerator -}}
管理者またはモデレーター専用ページです。
{{- else -}}
権限がありません。
{{- end -}}
tmpl.Execute(os.Stdout, map[string]bool{"IsAdmin": false, "IsModerator": true})
管理者またはモデレーター専用ページです。
notの使い方
notは条件が真なら偽、偽なら真になります。
{{- if not .IsGuest -}}
ゲストではない
{{- end -}}
tmpl.Execute(os.Stdout, map[string]bool{"IsGuest": false})
ゲストではない
Goテンプレートにおける比較
Go の template では 演算子(==, !=, < など)は使えません。
代わりに 比較用の組み込み関数を使います。
ちなみに先に紹介したand,or,notも組み込み関数です。
比較関数一覧
| 演算子 | 意味 | Go template の関数 | 使用例 |
|---|---|---|---|
== | 等しい | eq | {{ if eq .A .B }} |
!= | 等しくない | ne | {{ if ne .Status "ng" }} |
< | より小さい | lt | {{ if lt .Age 20 }} |
<= | 以下 | le | {{ if le .Score 60 }} |
> | より大きい | gt | {{ if gt .Count 0 }} |
>= | 以上 | ge | {{ if ge .Level 5 }} |
文字列比較
{{- if eq .Env "production" -}}
本番環境
{{- else -}}
開発環境
{{- end -}}
※ 文字列は ダブルクォート必須
tmpl.Execute(os.Stdout, map[string]string{"Env": "production"})
本番環境
数値比較
{{- if gt .Price 100000 -}}
高額商品
{{- end -}}
※int, float64 など 型が一致している必要あり
tmpl.Execute(os.Stdout, map[string]int{"Price": 120000})
高額商品
Goテンプレートのif文を使うメリット
Goテンプレートのif文を使うことで、以下のようなメリットがあります。
- 動的なコンテンツ表示が可能になる
- 条件に応じて表示内容を切り替えられるため、柔軟なテンプレート設計が可能になる
- シンプルな構文で初心者でも理解しやすい
特にWebアプリケーション開発などでは、ユーザーの状態や権限に応じて表示内容を変えることが多いため、if文を使った条件分岐は非常に役立ちます。
Goテンプレートのif文を使う際の注意点
Goテンプレートのif文を使う際には、以下の点に注意しましょう。
- 必ず
{{ end }}でif文を閉じる必要があります。閉じ忘れるとエラーになります。 - 条件式に渡す変数が存在しない場合、テンプレートの実行時にエラーになることがあります。変数が存在するかどうかを事前に確認しましょう。
- 複雑な条件式はテンプレート内で書くと可読性が下がるため、Go側で事前に処理してシンプルな条件式を渡すようにしましょう。
あとがき
今回はGo言語のテンプレート機能におけるif文の基本的な使い方を初心者向けに解説しました。andやorを使った複数条件の指定方法も紹介しましたので、ぜひ実際の開発で活用してみてください。テンプレートを使いこなすことで、より柔軟で効率的な開発が可能になります。