1

把我的头撞到这个上。我无法获得分配给结构的 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。

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

4

2 回答 2

2

我怀疑第 160 行的 d 为 nil 或 d.Response 为 nil。如果这是真的,您需要确定这是否合适,如果不合适,请更改您的代码。

于 2013-09-11T23:46:55.267 回答
1

我怀疑@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
        }
于 2013-09-12T00:08:54.260 回答