dousendun8411 2013-11-04 16:02
浏览 221
已采纳

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

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.

  • 写回答

1条回答 默认 最新

  • duanmiyang6201 2013-11-04 17:43
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作