Go template.Execute():无效内存地址或零指针取消引用

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 =

我正在尝试使用带有自定义分隔符的Go html/模板

但是,我可以解析并执行我的“index.html”文件,每当我试图更改模板分隔符时,我都会遇到以下错误:

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)