首頁 >後端開發 >Golang >恐慌:無效的記憶體位址或 Nil 指標取消引用:如何修復不正確的錯誤處理?

恐慌:無效的記憶體位址或 Nil 指標取消引用:如何修復不正確的錯誤處理?

DDD
DDD原創
2025-01-05 13:00:40239瀏覽

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 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