1 つの方法は、ポインターを逆参照するカスタム関数を登録することです。これにより、結果を必要なものと比較したり、それを使用して他のことを実行したりできます。
例えば:
func main() {
t := template.Must(template.New("").Funcs(template.FuncMap{
"Deref": func(i *int) int { return *i },
}).Parse(src))
i := 5
m := map[string]interface{}{"ID": &i}
if err := t.Execute(os.Stdout, m); err != nil {
fmt.Println(err)
}
}
const src = `{{if eq 5 (Deref .ID)}}It's five.{{else}}Not five: {{.ID}}{{end}}`
出力:
It's five.
または、ポインターと非ポインターを受け取る別のカスタム関数を使用して、比較を行うこともできます。
"Cmp": func(i *int, j int) bool { return *i == j },
そして、テンプレートから呼び出します:
{{if Cmp .ID 5}}It's five.{{else}}Not five: {{.ID}}{{end}}
出力は同じです。Go Playgroundでこれらを試してみてください。