理解 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 類型佈局內的對應函數。
Reflection,如「反射定律」一文所述,提供了一種方便的方法透過reflect.ValueOf和reflect.TypeOf方法公開(值,類型)對來探索這種表示的方法。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3