解析无效的内存地址或无指针取消引用

时间:2013-09-11 22:46:07

标签: google-app-engine go

在这一个上敲我的头。我无法获得分配给结构的HTTP响应。

我的结构设置如下:

type DataConnect struct {
    Response *Response
}

type Response struct {
    response []byte
    errors   []string
}

然后,所讨论的功能就像这样(为了便于阅读而修剪):

137 func (d *DataConnect) send() bool {

    ...

154    out, err := ioutil.ReadAll(resp.Body)
155    if err != nil {
156        fmt.Println(err)
157    }
158
159    fmt.Printf("%s\n", out) // THIS WORKS
160    d.Response.response = out // THIS DOES NOT WORK
161 }

这样做会导致以下错误:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x36532]

goroutine 1 [running]:
github.com/DataConnect.(*DataConnect).send(0xc2000af4a0, 0x232a00)
github.com/DataConnect/DataConnect.go:160 +0xc22

现在,如果我将DataConnect.Response.response更改为interface{},我可以成功保存到它,但是我需要[]byte,因为稍后我将对内容进行json.Unmarshal。

有人知道为什么这不起作用吗?

2 个答案:

答案 0 :(得分:2)

我怀疑d为n或d.Response在第160行为零。如果确实如此,则需要确定是否合适,如果不是,则更改代码。

答案 1 :(得分:0)

我怀疑@alex是正确的,将代码更改为查找nil的内容(来自第159行):

        fmt.Printf("%s\n", out) // THIS WORKS
        if d != nil && d.Response != nil {
           d.Response.response = out // THIS DOES NOT WORK
        } else {
           // appropriate error logging and handling
        }