我尝试使用template.FuncMap但有恐慌错误
panic: runtime error: invalid memory address or nil pointer dereference
代码:
type Article struct{
Id int
Title string
Tags string
}
var (
tplFuncMap template.FuncMap
)
func main() {
article := &Article{Id:1, Title:"hello world", Tags:"golang,javascript"}
tplFuncMap = make(template.FuncMap)
tplFuncMap["Split"] = Split
tpl, _ := template.ParseFiles("a.html", "b.html")
tpl = tpl.Funcs(tplFuncMap)
tpl.Execute(os.Stdout, article)
}
func Split(s string, d string) []string {
arr := strings.Split(s, d)
return arr
}
a.html
//i want to split tags and range
{{$arr := Split .Tags ","}}
{{range $k, $v := $arr}}
<a href="{{$v}}">{{$v}}</a>
{{end}}
感谢。
答案 0 :(得分:3)
您忽略了template.ParseFiles
返回的错误,这可能会告诉您问题所在。 ParseFiles可能会抛出错误,因为解析模板时未定义函数Split
。永远不要忽视错误。
修改强>
要使其有效,请执行以下操作:
tplFuncMap = make(template.FuncMap)
tplFuncMap["Split"] = Split
tmpl, err = template.New("").Funcs(tplFuncMap).ParseFiles("a.html", "b.html")
不同之处在于,在解析模板之前定义了FuncMap
。