問題:
儘管聲明了滿足錯誤介面的結構體的nil 實例,為什麼與nil 的比較會回傳「Error is not nil」?
答案:
Go 中的介面比較同時考慮被比較實體的類型和值。將錯誤實例與 nil 進行比較時,會發生以下情況:
因此,儘管兩個實例都使用 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中文網其他相關文章!