I try to use template.FuncMap but there are panic error
panic: runtime error: invalid memory address or nil pointer dereference
code:
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}}
Thanks.
You are ignoring the error returned by template.ParseFiles, that will probably tell you your problem. ParseFiles is probably throwing an error because the function Split isn't defined when you parse the template. Never ignore errors.
Edit
To make it work, do something like this:
tplFuncMap = make(template.FuncMap)
tplFuncMap["Split"] = Split
tmpl, err = template.New("").Funcs(tplFuncMap).ParseFiles("a.html", "b.html")
The difference is that the FuncMap is defined before the templates are parsed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With