猿问

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

在这个上敲我的头。我无法获得分配给结构的 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为 typeinterface{}我可以成功保存到它,但是我需要它,[]byte因为稍后我将对内容执行 json.Unmarshal 。


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


紫衣仙女
浏览 312回答 2
2回答

白板的微信

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

幕布斯7119047

我怀疑@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        }
随时随地看视频慕课网APP

相关分类

Go
我要回答