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の配列・連想配列
となるためです