内存错误,html/模板在Go中

内存错误,html/模板在Go中,go,Go,我在尝试执行此代码时遇到一些内存错误: package web import ( "net/http" "html/template" ) type Hello struct { Level string } func Main(w http.ResponseWriter, r *http.Request) { h := Hello{Level: "gsdfg"} t, _ := template.ParseFiles("web.html")

我在尝试执行此代码时遇到一些内存错误:

package web

import (
    "net/http"
    "html/template"
)

type Hello struct {
    Level string
}

func Main(w http.ResponseWriter, r *http.Request) {

    h := Hello{Level: "gsdfg"}

    t, _ := template.ParseFiles("web.html")
    t.Execute(w, h)
}
我在浏览器中收到的错误消息如下:

the runtime process gave a bad HTTP response: ''

2015/03/26 11:34:56 http: panic serving 127.0.0.1:43269: runtime error: invalid memory address or nil pointer dereference
我不明白我做错了什么…

返回一个错误

func ParseFiles(filenames ...string) (*Template, error)
如果发生错误,解析将停止,并且返回的
*模板
为零

如果出现问题,您应该检查错误。
这可以解释为什么“
t
”可能为零

一般来说,最好的做法是永远不要忽视错误

在这里:

返回一个错误

func ParseFiles(filenames ...string) (*Template, error)
如果发生错误,解析将停止,并且返回的
*模板
为零

如果出现问题,您应该检查错误。
这可以解释为什么“
t
”可能为零

一般来说,最好的做法是永远不要忽视错误

在这里:


另一个解决方案是使用
模板。必须使用
函数在出错时造成死机。在这种情况下,它的使用是合理的,因为程序需要它的资源

t := template.Must(template.ParseFiles("web.html"))

另一个解决方案是使用
模板。必须使用
函数在出错时造成死机。在这种情况下,它的使用是合理的,因为程序需要它的资源

t := template.Must(template.ParseFiles("web.html"))

我猜html模板的路径有问题。该文件与我的.go文件位于同一目录中,相对路径不起作用吗?@theva该文件可能在那里,但解析可能有错误:只有通过实际检查错误才能确定。因此,添加log.Fatal(err)我得到以下信息:“2015/03/26 12:04:23 open web.html:没有这样的文件或目录”,我应该如何格式化路径?@theva它区分大小写:您是否尊重文件名的大小写?@theva您是否在与当前文件相同的文件夹中执行程序?我猜html模板的路径可能有问题。该文件与我的.go文件位于同一目录中,相对路径不起作用吗?@theva该文件可能在那里,但解析可能有错误:只有通过实际检查错误才能确定。因此,添加log.Fatal(err)我得到以下信息:“2015/03/26 12:04:23 open web.html:没有这样的文件或目录”,我应该如何格式化路径?@theva它区分大小写:您是否尊重文件名的大小写?@theva您是否在与当前文件相同的文件夹中执行程序?这确实是一个很好的做法。我错过了“
Must()
”方法+1此外,模板文件的解析可能会从特定的处理程序中移出,除非您确实希望为每个请求重新解析(可能)未更改的模板文件。(如果您希望能够在不重新启动服务器的情况下更改模板,更好的解决方案是在SIGHUP或类似的情况下重新加载服务器的配置)。我错过了“
Must()
”方法+1此外,模板文件的解析可能会从特定的处理程序中移出,除非您确实希望为每个请求重新解析(可能)未更改的模板文件。(如果您希望能够在不重新启动服务器的情况下更改模板,更好的解决方案是在SIGHUP或类似情况下重新加载服务器的配置)。