首頁 > 後端開發 > Golang > 為什麼將 Nil 結構體實例與 Nil 進行比較會回傳「錯誤不是 nil」?

為什麼將 Nil 結構體實例與 Nil 進行比較會回傳「錯誤不是 nil」?

Linda Hamilton
發布: 2024-10-30 08:56:02
原創
821 人瀏覽過

Why Does Comparing a Nil Struct Instance to Nil Return

與Nil 值的介面比較

問題:

儘管聲明了滿足錯誤介面的結構體的nil 實例,為什麼與nil 的比較會回傳「Error is not nil」?

答案:

Go 中的介面比較同時考慮被比較實體的類型和值。將錯誤實例與 nil 進行比較時,會發生以下情況:

  • 錯誤介面的 nil 實例具有 nil 值和 nil 類型 (error(nil))。
  • nil Goof 結構體的實例具有 nil 值,但具有非 nil 類型 (*Goof)。

因此,儘管兩個實例都使用 nil 值初始化,但它們的不同類型會導致不相等的比較。

為了解決這個問題並傳回預期的「Error is nil」輸出,nil 實例應該會指派給一個 error 變量,因為它的零值為 error(nil)。或者,在傳回錯誤的函數中傳回 nil 也會產生預期的結果。

介面比較的詳細說明:

Go 介面是使用類型和價值。類型表示介面的具體實現,而值表示實際儲存的資料。只有當類型和值都未設定 (nil, nil) 時,介面值才被視為 nil。

比較兩個介面值是否相等時,類型和值必須相符。在提供的範例中,Goof 結構體的 nil 實例有一個 nil 值,但有一個非 nil 類型,使其不等於同時具有 nil 值和類型的 error 實例。

這個概念擴展到零實例之外。例如,具有相同基礎資料(例如 3)但不同類型(int 和 Bob)的兩個整數值在儲存在​​介面中時將比較不相等,因為類型不同。

以上是為什麼將 Nil 結構體實例與 Nil 進行比較會回傳「錯誤不是 nil」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板