package main import ( "fmt" "html/template" "path/filepath" "sync" ) var cachedTemplates = map[string]*template.Template{} var cachedMutex sync.Mutex func dollarize(value int) string { return fmt.Sprintf("$%0.2f", float32(value)/100.0) } var funcs = template.FuncMap{ "dollarize": dollarize, } func T(name string) *template.Template { cachedMutex.Lock() defer cachedMutex.Unlock() if t, ok := cachedTemplates[name]; ok { return t } t := template.New("_base.html").Funcs(funcs) t = template.Must(t.ParseFiles( "templates/_base.html", filepath.Join(*template_dir, name), )) cachedTemplates[name] = t return t }