英文:
runtime error: invalid memory address or nil pointer dereference in martini with template
问题
这是我的代码:
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
})
它返回一个运行时错误:无效的内存地址或空指针解引用。我不明白为什么会出现这个错误...
英文:
here is my code :
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
})
and it returns me a runtime error: invalid memory address or nil pointer dereference
and i don't understand why ...
答案1
得分: 4
调用
t, _ = t.Parse(templateh)
返回nil和一个错误,错误说明函数"todo"未定义。模板的Execute方法对nil指针进行解引用,导致恐慌。
你应该做两件事:
- 检查和处理解析调用的错误返回。这是使用template.Must辅助函数的好地方。
- 通过将
{{ todo }}
替换为{{.}}
来修复模板。
英文:
The call
t, _ = t.Parse(templateh)
returns the nil and error an error stating that the function "todo" is not defined. The template Execute method dereferences the nil pointer, resulting in the panic.
You should change two things:
- Check and handle the error return from the parse call. This is a good place to use the template.Must helper function.
- Fix the template by replacing
{{ todo }}
with{{.}}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论