【发布时间】:2014-09-10 08:26:51
【问题描述】:
我知道在go 模板中,我可以调用名为add 的函数来表达1 + 1 之类的表达式。但是像2 - 1这样的表达式如何命名函数?
【问题讨论】:
我知道在go 模板中,我可以调用名为add 的函数来表达1 + 1 之类的表达式。但是像2 - 1这样的表达式如何命名函数?
【问题讨论】:
默认不包含add 函数。但是,您可以自己轻松编写此类函数。例如:
tmpl := template.Must(template.New("").Funcs(template.FuncMap{
"minus": func(a, b int) int {
return a - b
},
}).Parse("{{ minus 5 2 }}"))
tmpl.Execute(os.Stdout, nil)
【讨论】:
你总是可以定义这样的函数:
package main
import (
"html/template"
"net/http"
"strconv"
)
var funcMap = template.FuncMap{
"minus": minus,
}
const tmpl = `
<html><body>
<div>
<span>{{minus 1 2}}</span>
</div>
</body></html>`
var tmplGet = template.Must(template.New("").Funcs(funcMap).Parse(tmpl))
func minus(a, b int64) string {
return strconv.FormatInt(a-b, 10)
}
func getPageHandler(w http.ResponseWriter, r *http.Request) {
if err := tmplGet.Execute(w, nil); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
func main() {
http.HandleFunc("/", getPageHandler)
http.ListenAndServe(":8080", nil)
}
【讨论】:
int64和strconv的理由吗?另一个答案stackoverflow.com/a/24838014/10245 没有,并且为我避免了 int/int64 转换错误。谢谢你的回答,它很有用。