Golangのtemplateファイルでisやnot equal、and条件、or条件の書き方を調べたので備忘録です。
※ 適宜追加していきます。
is評価
{{ if eq num 1 }} // if num == 1
// 以下同義
{{ if eq ( .num, 1 ) }}
not equel評価
{{ if ne .num 1 }} // if num != 1
//以下同義
{{ if ne (.num, 1) }}
and 評価
{{ if and (eq .str1 "a") (eq .str2 "b") }} // if str1 == 1 && str2 == b
and A B または and (A, B) になります。
or 評価
{{ if or (eq .str1 "a") (eq .str2 "b") }} // if str1 == 1 || str2 == b
or A B または or (A, B) という書き方になります。
nil 評価
objectのpropertyがnilかどうかを判定したいケースを想定してます。
{{ if .Object.SampleProperty }}
// SamplePropertyが存在する
{{ else }}
// SamplePropertyがnil
{{ end }}
参考: buildin関数
上記の他にもgoのパッケージである text/tempalte パッケージにはtemplateファイルで使えるbuiltin関数があります。
builtin関数は src/text/template/func.go の中を見ると
type FuncMap map[string]interface{} var builtins = FuncMap{ "and": and, "call": call, "html": HTMLEscaper, "index": index, "js": JSEscaper, "len": length, "not": not, "or": or, "print": fmt.Sprint, "printf": fmt.Sprintf, "println": fmt.Sprintln, "urlquery": URLQueryEscaper, // Comparisons "eq": eq, // == "ge": ge, // >= "gt": gt, // > "le": le, // <= "lt": lt, // < "ne": ne, // != }
と定義されています。
and関数を確認して見てみると、
// and computes the Boolean AND of its arguments, returning // the first false argument it encounters, or the last argument. func and(arg0 reflect.Value, args ...reflect.Value) reflect.Value { if !truth(arg0) { return arg0 } for i := range args { arg0 = args[i] if !truth(arg0) { break } } return arg0 }
and (A, B, C...) という形式を取るときに、Aから評価していって一つでもfalseがあればfalseを返しています。
templateで使える関数を見るにはこの src/text/template/func.go を参照すれば良いと思います。。