1. Home
  2. /
  3. Go言語
  4. /
  5. Go言語Tips② Hugoで使われるlayoutの正体

Go言語Tips② Hugoで使われるlayoutの正体

Go言語Tips② Hugoで使われるlayoutの正体

Hugoで使われるlayoutですが実態はgo-templateという、いわゆるテンプレートエンジンです

https://pkg.go.dev/text/template


テンプレート内のハイフンありなしの違い

たまにHugoテンプレート内で{{ .Title }}{{- .Title -}}で書いてるものを見かけます この違いはハイフンを付けることで前後の空白を除去したい場合に使われます

ちなみに公式ドキュメントにあります
https://pkg.go.dev/text/template#hdr-Text_and_spaces


配列や連想配列の空チェック

Hugoを使う際、空ではない文字列or配列or連想配列のチェックする時に、最初はこんな感じで空チェックをしていたんですが

{{ $item := dict "tags" (slice "tag1" "tag2") }}

{{ if isset $item "tags" }}
    {{ if gt (len $item.tags) 0 }}
        {{ if reflect.IsMap $item.tags }}
            空ではない連想配列です
        {{ else if reflect.IsSlice $item.tags }}
            空ではない配列です
        {{ else }}
            空ではない文字列です
        {{ end }}
    {{ end }}
{{ end }}

if文を使うともっとシンプルに書けます

{{ if $item.tags }}
    {{ if reflect.IsMap $item.tags }}
        空ではない連想配列です
    {{ else if reflect.IsSlice $item.tags }}
        空ではない配列です
    {{ else }}
        空ではない文字列です
    {{ end }}
{{ end }}

これはgo-templateの仕様でifの「偽」とみなされる値は
false、0、nil、""(空文字)、長さ0の配列・連想配列
となるためです

https://pkg.go.dev/text/template#hdr-Actions

関連記事

Hugoを使い始めた人に捧げるTips11選

Hugoを使い始めた人に捧げるTips11選

1. とりあえずhugo server -Dって使ってるけどこれって何? draft: trueのコンテンツファイルも含めて出力。 詳しくはhugo server --helpでチェック 2. taxonomyとtermの違い taxonomyは「タグ」や「カテゴリー」といった分類自体 termはそのタグやカテゴリーに属する「go」とか「tips」のことです こちらのサイトが非常に分かりやすいです! https://maku77.github.io/hugo/taxonomy/basic.html 3. content配下の固定ページに共通のlayoutを使
Go言語Tips① 変数について

Go言語Tips① 変数について

変数定義 Hugoのテンプレート内で{{ $title := .Title }}や{{ $title = .Title }} のようにコロンをつけたり、付けなかったりする記述を見ます。 これはgo言語の書き方の特徴で、変数を定義する場合の省略記法です title := "タイトル" 省略しない場合はこうなります var title string = "タイトル" 変数のスコープ go言語の変数スコープはif、for、switchなどのブロック内で有効です if内などで新しく変数を定義す