使用golang的标准库搭建网站--3.模板函数
和大多数语言的的模板语法类似:{{.Name | FuncName}} func (t *Template) Funcs(funcMap FuncMap) *Template
Funcs函数就是用来创建我们模板函数的函数了,它需要一个FuncMap类型的参数,继续看手册 type FuncMap map[string]interface{}
官方文档里是这么解释的
简单翻译一下就是 func functionName(args ...interface{}) string
你也可以有第二个返回值,但必须是error类型的。如果函数执行没有出错,那这个值必须是nil, func Index(w http.ResponseWriter,r *http.Request) {
//用于保存数据的map
data := make(map[string]string)
//保存模板函数
tempfunc := make(template.FuncMap)
tempfunc["ShowName"] = ShowName
t,_ := template.ParseFiles("index.html")
//注册模板函数
t = t.Funcs(tempfunc)
data["Name"] = "BCL"
t.Execute(w,data)
}
//这个示例函数,将传进来的字符串用*****包起来
func ShowName(args ...interface{}) string {
//这里只考虑一个参数的情况
var str string = ""
if s,ok := args[0].(string); ok {
str = "*****" + s + "*****"
} else {
str = "Nothing"
}
return str
}
如果这么写的话,似乎看上去并没有什么问题,并且编译能通过, 2015/07/22 22:38:07 http: panic serving 127.0.0.1:37346: runtime error: invalid memory address or nil pointer dereference 需要改写模板解析的函数 func Index(w http.ResponseWriter,r *http.Request) {
//用于保存数据的map
data := make(map[string]string)
tempfunc := make(template.FuncMap)
tempfunc["showname"] = ShowName
//得给模板起个名字才行
t := template.New("index.html")
t = t.Funcs(tempfunc)
t,_ = t.ParseFiles("./index.html")
data["Name"] = "BCL"
t.Execute(w,data)
}
这样即可得到正确的输出结果 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |