【Hugo】print・printf の使い方

のテンプレート文にたびたび出現するprint関数とprintf関数について、

その使い方を詳しく解説していきます。


print関数の使い方

print関数は、与えられた引数をそのまま返します。

次のように書きます。

print (入力)

以下は使用例です。

{{ print `foo` }} -> foo
{{ print `foo` `bar` }} -> foobar
{{ print (slice 1 2 3) }} -> [1 2 3]
{{ print (dict `a` 2 `b` 4) }} -> map[a:2 b:4]

変数を使うこともできます。

{{ $x := `foo` }}
{{ print $x }}
-> foo
{{ $x := `foo` }}
{{ $y := 3 }}
{{ print $x `+` $y }}
-> foo+3

単体で用いることでデバッグなどに使うこともできますが、

基本的には変数に代入することで使いまわしをすることが多いです。

{{ $dirname := `static` }}
{{ $filename := `image` }}
{{ $extention := `jpg` }}
{{ $path := print $dirname `/` $filename `.` $extention }}
-> static/image.jpg

この例ではprint関数が引数を5つも取っていて、可読性に乏しいため、

このような場面には後述するprintf関数のほうが適しています。

  関連記事【Hugo】.Scratch とは?
【Hugo】.Scratch とは?

printf関数の使い方

こちらは文字列をフォーマットして出力します。

書き方は次の通り。

printf (フォーマット) (入力)

申し訳ないことに、フォーマットとは何かを言葉で説明する能力がないので、

例を見てなんとなく理解していただければと思います…。

例えば次のように書きます。

{{ printf `My favorite color is %s.` `green` }}
-> My favorite color is green.

%sの部分にgreenが代入される感じですね。

こんな書き方をするのはまれで、だいたい第2引数以降は変数が来ます。

{{ $day_word := `Today` }}
{{ $year := 2020 }}
{{ $month := 5 }}
{{ $day := 17 }}
{{ printf `%s is %d/%d/%d.` $day_word $year $month $day }}
-> Today is 2020/5/16.

%sとか%dのところにどんな文字が来るかは、そこに入る変数の型によって決まります。

ブール型(truefalse)なら%t、10進法整数なら%d、文字列なら%sです。

わからなければ%vを指定しまえば自動で判断してくれます。

詳細については Go のドキュメントにあります。

printf関数を使えば、さきほどの例もより簡潔に表すことができます。

{{ $dirname := `static` }}
{{ $filename := `image` }}
{{ $extention := `jpg` }}
{{ $path := printf `%s/%s.%s` $dirname $filename $extention }}
-> static/image.jpg
  関連記事【Hugo】findRE・replaceRE の使い方
【Hugo】findRE・replaceRE の使い方

printf関数は特に、最初は何をしているのか理解しにくいですが、使えるようになるとたいへん重宝します。

この記事がお役に立てれば幸いです。

ではまた👋