Go でのインターフェイス表現を理解する
Go でインターフェイスを操作する場合、その基礎となる表現を把握することが重要です。 2 つの主要なリソースがこのトピックに光を当てていますが、それらの視点は異なります。
「リフレクションの法則」記事 (http://blog.golang.org/laws-of-reflection) では、インターフェイスの概念が紹介されています。 r io.Reader の例に見られるように、(値、型) ペアが含まれています。このペアには、値 tty とその型 *os.File.
が含まれています。また、他の記事では、インターフェイスにはインターフェイスの仕様を満たすためのメソッドのみが含まれていることを強調しています。 Binary 型を保持する Stringer の例では、itable (インターフェイス メソッド テーブル) には、Binary 型で定義されている他のメソッドを除いて、String の実装に必要なメソッドのみがリストされています。
これらの観点を調整するには、Go のインターフェイスを検討してください。実行時に「ラッパー オブジェクト」として。これらは、ラップされたオブジェクト上でメソッドを実行する際にランタイムをガイドする別のオブジェクトである itable に関する情報を提供します。たとえば、r で Read を呼び出すと、ランタイムは itable を使用して、os.File タイプのレイアウト内の対応する関数にジャンプします。
リフレクションは、「リフレクションの法則」の記事で説明されているように、便利なこの表現を調べる方法は、reflect.ValueOf メソッドとreflect.TypeOf メソッドを通じて (値, 型) ペアを公開することです。
以上がGo: (値、タイプ) ペアまたはメソッド テーブルでインターフェイスはどのように表現されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。