Pages

2018年2月8日木曜日

Hugoのテンプレいじった時に変数の再代入に悩んだ

ダンジョンマッピングツール Wziの特設サイトを作った時に、スタティックサイトジェネレーターHugoを使ったのですが、これ結構クセあるなぁと思いました。
変数への再代入で随分と悩みました。

スクリプトがGoベースとなっているので、変数の定義もGoっぽく、テンプレートの中では、以下のように書いていきます。
{{ $v := 123 }}
既に{{ }}が面倒な感じがしましたが、デザイン テンプレートをちょこちょこっといじって、自分の気にいるように調整しようと思ったぐらいなので我慢します。
因みに私はそれまでGoを使ったことは無かったのですが、今回の件もあってA Tour of Goをかじりました。Goについてはその程度の知識です。

それで、以下のようには書けないので随分と悩みました。
{{ $v := 123 }
{{ if eq $v 123 }}
  {{ $v = 0 }}  # <-ここでビルドエラーが出てしまう。
{{ end }}


if文の中で変数$vの値を参照することはできるのですが、再代入することはできませんでした。
これはGoの制限でもなさそうだし、何故できないのか分かりません。しかし代替手法として、Scratchという機能が用意されています。

Scratchを使うと、以下のようになります。
{{ $.Scratch.Set "v" 123 }}
{{ if eq ($.Scratch.Get "v") 123 }}
  {{ $.Scratch.Set "v" 0 }}
{{ end }}

<h1>{{ $.Scratch.Get "v" }}</h1>
いちいち、vの値を取得するのに助長になるので、
{{ $v := $.Scratch.Get "v" }}

<h1>{{ $v }}</h1>
とでもして、変数に入れてみたりして使ってます。

1 件のコメント:

  1. The Best Casino Site in the UK for 2021
    Live casino: There are loads of exciting casinos online, and most of them have many of the most appealing bonuses. You luckyclub.live can choose from our selection of

    返信削除