首页 >后端开发 >Golang >恐慌:无效的内存地址或 Nil 指针取消引用:如何修复不正确的错误处理?

恐慌:无效的内存地址或 Nil 指针取消引用:如何修复不正确的错误处理?

DDD
DDD原创
2025-01-05 13:00:40298浏览

Go Panic: Invalid Memory Address or Nil Pointer Dereference: How to Fix Incorrect Error Handling?

Go: Panic: Runtime Error: Invalid Memory Address or Nil Pointer Dereference

执行 Go 程序时,您可能会遇到恐慌,以下错误消息:

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

此错误通常表示您的程序处理方式存在问题内存地址或指针。让我们分解一下可能的原因:

问题:错误处理不正确

在提供的 Go 代码中,getBody 函数在处理来自 HTTP 的响应时存在问题client:

if err != nil {
    return nil, err
}
...
if err != nil {
    return nil, err
}

第一个 if err != nil 检查在访问响应之前发生body:

if err != nil {
    return nil, err
}

res, err := client.Do(req)

但是,用于关闭响应正文 (res.Body) 的 defer 语句会立即执行,甚至在错误检查之前也是如此。这可能会导致过早尝试关闭主体并导致“无效内存地址”错误。

解决方案:

要解决此问题,请移动错误在访问和关闭响应正文之前进行检查:

res, err := client.Do(req)

if err != nil {
    return nil, err
}

defer res.Body.Close()

通过这样做,代码可以在处理响应之前正确检查任何潜在错误body,防止“无效内存地址”错误。

以上是恐慌:无效的内存地址或 Nil 指针取消引用:如何修复不正确的错误处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn