3

我尝试使用 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
}

一个.html

//i want to split tags and range
{{$arr := Split .Tags ","}}
{{range $k, $v := $arr}}
    <a href="{{$v}}">{{$v}}</a>
{{end}}

谢谢。

4

1 回答 1

3

您忽略了返回的错误template.ParseFiles,这可能会告诉您您的问题。ParseFiles 可能会引发错误,因为在Split解析模板时未定义该函数。永远不要忽略错误。

编辑

要使其工作,请执行以下操作:

tplFuncMap =  make(template.FuncMap)  
tplFuncMap["Split"] = Split  
tmpl, err = template.New("").Funcs(tplFuncMap).ParseFiles("a.html", "b.html")

不同之处在于FuncMap是在模板解析之前定义的。

于 2013-11-04T17:43:13.197 回答