2014-09-15 5 views
0

вот мой код:выполнения: неверный адрес памяти или нулевой указатель разыменования в мартини с шаблоном

m.Get("/", func(r render.Render) string { 
    t := template.New("some template") 
    toto := "titi" 
    templateh := "<html>Hello world! {{ toto }} <form name='input' action='../first' method='post' ><input type='texte' name='toto'><input type='submit' value='Submit'></form></html>" 
    t, _ = t.Parse(templateh) 
    var doc bytes.Buffer 
    err := t.Execute(&doc, toto) 
    if err != nil { 
     fmt.Println("There was an error:", err) 
    } 
    s := doc.String() 
    fmt.Println(s) 

    return s 

}) 

и возвращает мне ошибку времени выполнения: недопустимый адрес памяти или ноль указатель разыменования

и я не понимаю, почему ...

+1

@DaveCheney: пожалуйста, не создавайте бессмысленные тегов. –

ответ

4

вызов

t, _ = t.Parse(templateh) 

возвращающую nil и error - ошибка, указывающая, что функция «todo» не определена. Метод Execute шаблона разыгрывает указатель nil, что приводит к панике.

Вы должны изменить две вещи:

  • Проверить и обработать возврат ошибки от вызова синтаксического анализа. Это хорошее место для использования вспомогательной функции template.Must.
  • Зафиксировать шаблон, заменив {{ todo }} с {{.}}