理解 Go 中的介面表示
在 Go 中使用介面時,掌握其底層表示非常重要。兩個關鍵資源闡明了這個主題,但他們的觀點不同。
「反射定律」文章(http://blog.golang.org/laws-of-reflection) 介紹了介面的概念包含一個(值,類型)對,如r io.Reader 的範例所示。該對包含值 tty 及其類型 *os.File。
或者,另一篇文章強調介面僅包含滿足介面規範的方法。在 Stringer 持有 Binary 類型的範例中,itable(介面方法表)僅列出了 String 實作所需的方法,不包括 Binary 類型上定義的其他方法。
為了協調這些觀點,請考慮 Go 中的介面在運行時作為「包裝物件」。它們提供有關另一個物件(itable)的信息,該資訊指導運行時在包裝物件上執行方法。例如,當在 r 上呼叫 Read 時,執行時間使用 itable 跳到 os.File 類型佈局內的對應函數。
反射,如「反射定律」一文所述,提供了一種方便的方法透過reflect.ValueOf 和reflect.TypeOf 方法公開(value, type) 對來探索這種表示的方法。
以上是Go 中如何表示介面:(值、型別)對或方法表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!