内存错误,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或类似情况下重新加载服务器的配置)。