使用嵌入在結構中的介面進行反射:識別「真實」函數
考慮以下程式碼片段:
根據Go 的慣用方法,上面的模式表示B 必須實作A 介面。然而,與 OOP 語言不同的是,沒有對此進行編譯時檢查。相反,您可以選擇僅實作介面的一部分。
反射可讓您直接從 B 的類型檢索 A 的方法,即使不存在接收者 B 的方法。然而,這提出了一個問題:如何在觸發恐慌之前檢測是否存在「真正的」實現?
要解決這個問題,不能只依賴反射。相反,請考慮使用簡單的方法:
或者,您可以使用以下基於反射的檢查:
在這種情況下,檢查bMeth 的ptr 欄位是否function is 0 可讓您確定函數是否在匿名介面值的函數表中。如果為零,則 B 結構體中沒有相應的方法,表明缺乏真正的實現。
以上是如何使用反射檢測 Go 中的「真實」介面實現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!