golangのテンプレート(例えば text/template)では、FuncMapを使うことで好きな関数を実行できます。ので練習がてら簡単な計算機を作ってみます:
package example_test
import (
"bytes"
"fmt"
"log"
"text/template"
)
func ExampleTemplateCalculator() {
funcMap := template.FuncMap{
"add": func(a, b int) int { return a + b },
"sub": func(a, b int) int { return a - b },
"mul": func(a, b int) int { return a * b },
"div": func(a, b int) int { return a / b },
}
var buf bytes.Buffer
tp := template.Must(template.New("calculator").Funcs(funcMap).Parse("{{mul (div (sub 3 (add 1 4)) 2) -10}}"))
err := tp.Execute(&buf, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(buf.String())
// Output:
// 10
}
playgroundはこちら: http://play.golang.org/p/iYlS-L4qQZ