内存错误,Go中的html/template

huangapple go评论83阅读模式
英文:

Memory error, html/template in 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")
    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

我不明白我做错了什么...

英文:

I get some memory error when trying to execute this code:

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 error message I get in the browser is this:

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

I dont understand what I am doing wrong...

答案1

得分: 3

template.ParseFiles 返回一个错误

func ParseFiles(filenames ...string) (*Template, error)

> 如果发生错误,解析将停止,并且返回的 *Template 为 nil。

你应该检查错误,以防有问题。这可能解释了为什么 t 可能为 nil。

通常来说,最佳实践是永远不要忽略错误。

在这里:

var t *Template
if t, err := template.ParseFiles("web.html"); err != nil {
    // 做一些处理
    // 返回 err
    // 或者
    // panic(err)
}
英文:

template.ParseFiles returns an error

func ParseFiles(filenames ...string) (*Template, error)

> If an error occurs, parsing stops and the returned *Template is nil.

You should check the error in case there is an issue.
That could explain why 't' might be nil.

In general, the best practice is to never ignore error.

Here:

var t *Template
if t, err := template.ParseFiles("web.html"); err != nil {
    // do something
    // return err
    // or
    // panic(err)
}

答案2

得分: 2

另一种解决方案是使用template.Must函数,在出现错误时引发 panic。在这种情况下,使用它是合理的,因为程序需要它的资源。

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

Another solution is to use template.Must function to cause a panic in case of error. Its usage is justified in this case because the program needs its resources.

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

huangapple
  • 本文由 发表于 2015年3月26日 19:42:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/29277525.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定