golang - 如何在模板中拆分字符串

时间:2013-11-04 16:02:04

标签: go

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

感谢。

1 个答案:

答案 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