Go template.Execute():无效内存地址或零指针取消引用
我正在尝试使用带有自定义分隔符的Go html/模板 但是,我可以解析并执行我的“index.html”文件,每当我试图更改模板分隔符时,我都会遇到以下错误:Go template.Execute():无效内存地址或零指针取消引用,go,Go,我正在尝试使用带有自定义分隔符的Go html/模板 但是,我可以解析并执行我的“index.html”文件,每当我试图更改模板分隔符时,我都会遇到以下错误: runtime error: invalid memory address or nil pointer dereference goroutine 这是我的密码: package main import ( "html/template" "net/http" ) var sherrifTmpl =
runtime error: invalid memory address or nil pointer dereference goroutine
这是我的密码:
package main
import (
"html/template"
"net/http"
)
var sherrifTmpl = template.New("test").Delims("{[{", "}]}")
func serveHome(w http.ResponseWriter, r *http.Request) {
template.Must(sherrifTmpl.ParseFiles("index.html")).Execute(w, r)
}
如果我尝试以下任何一项:
package main
import (
"html/template"
"net/http"
)
func serveHome(w http.ResponseWriter, r *http.Request) {
template.Must(template.ParseFiles("index.html")).Execute(w, r)
}
或:
一切正常。我甚至试着抓住这个错误。但还是没有运气:
package main
import (
"html/template"
"net/http"
)
var sherrifTmpl = template.New("test").Delims("{[{", "}]}")
func serveHome(w http.ResponseWriter, r *http.Request) {
homeTmpl, err := sherrifTmpl.ParseFiles("index.html")
if err != nil {
panic(err)
}
homeTmpl.Execute(w, r)
}
我看不出我哪里做错了。如果你们能在这个问题上帮助我,我将不胜感激
更新1:
以下是恐慌:
2015/04/13 17:43:35 http: panic serving 127.0.0.1:56634: runtime error: invalid memory address or nil pointer dereference
goroutine 5 [running]:
net/http.func·011()
/usr/local/go/src/net/http/server.go:1130 +0xbb
html/template.(*Template).escape(0xc20803ad80, 0x0, 0x0)
/usr/local/go/src/html/template/template.go:59 +0xe4
html/template.(*Template).Execute(0xc20803ad80, 0x7f550e16f420, 0xc20805cd20, 0x7280c0, 0xc208032ea0, 0x0, 0x0)
/usr/local/go/src/html/template/template.go:75 +0x3d
main.serveHome(0x7f550e16f328, 0xc20805cd20, 0xc208032ea0)
/home/sasan/Works/Karina/Mobazi/Mon-Panel/routes.go:11 +0x136
net/http.HandlerFunc.ServeHTTP(0x7eb738, 0x7f550e16f328, 0xc20805cd20, 0xc208032ea0)
/usr/local/go/src/net/http/server.go:1265 +0x41
net/http.(*ServeMux).ServeHTTP(0xc20803a6c0, 0x7f550e16f328, 0xc20805cd20, 0xc208032ea0)
/usr/local/go/src/net/http/server.go:1541 +0x17d
net/http.serverHandler.ServeHTTP(0xc20805a0c0, 0x7f550e16f328, 0xc20805cd20, 0xc208032ea0)
/usr/local/go/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc20805cc80)
/usr/local/go/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/local/go/src/net/http/server.go:1751 +0x35e
一个模板实际上可能包含多个要执行的“模板”。这里实际上有两个模板;一个名为“test”的nil模板(带有自定义分隔符)和一个名为“index.html”的已解析模板 您可以使用与索引模板相同的名称来命名第一个索引模板
var sherrifTmpl = template.New("index.html").Delims("{[{", "}]}")
或者您可以使用ExecuteTemplate
template.Must(sherrifTmpl.ParseFiles("index.html")).ExecuteTemplate(w, "index.html", r)
在这种情况下,
html/template
包仍然不应该死机。这是一个将在go1.5中修复的错误(目前已在git master中修复)。哪一行导致了恐慌?@JimB我更新了我的问题尝试从homeTmpl.Execute(w,r)
检查错误,(不运行,仅用于说明目的)我仍然感到恐慌。你在routes做什么。go:11?(或者是路线上的东西。如果你不给我们看,那就走吧)我要完全理解这一点还有很长的路要走package@SasanRose当前位置有时很难找到。再加上你得到的零指针恐慌是一个在最新版本中修复的错误。(您的代码仍然无法工作,但至少不会出现恐慌)您的代码从我的项目中删除了错误,但页面完全为空。模板的内容将被删除。我使用go appengine,最新版本是go1.4.2。这是否意味着appengine用户有缺陷?
template.Must(sherrifTmpl.ParseFiles("index.html")).ExecuteTemplate(w, "index.html", r)