のテンプレート文にたびたび出現する
関連記事【Hugo】.Scratch とは?
関連記事【Hugo】findRE・replaceRE の使い方
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
関数のほうが適しています。
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
のところにどんな文字が来るかは、そこに入る変数の型によって決まります。
ブール型(true
とfalse
)なら%t
、10進法整数なら%d
、文字列なら%s
です。
わからなければ%v
を指定しまえば自動で判断してくれます。
詳細については Go のドキュメントにあります。
printf
関数を使えば、さきほどの例もより簡潔に表すことができます。
{{ $dirname := `static` }}{{ $filename := `image` }}{{ $extention := `jpg` }}{{ $path := printf `%s/%s.%s` $dirname $filename $extention }}-> static/image.jpg
printf
関数は特に、最初は何をしているのか理解しにくいですが、使えるようになるとたいへん重宝します。
この記事がお役に立てれば幸いです。
ではまた