为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
紫衣仙女 2021-06-22 01:04:32
在这个上敲我的头。我无法获得分配给结构的 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    }158159    fmt.Printf("%s\n", out) // THIS WORKS160    d.Response.response = out // THIS DOES NOT WORK161 }这样做会导致以下错误: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 。有谁知道为什么这不起作用?
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-06-28
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我怀疑@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

        }


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 311 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信