Comment les interfaces sont-elles représentées dans Go ?
Diverses ressources décrivent la représentation des interfaces dans Go, mais certaines peuvent paraître contradictoires. Cet article vise à clarifier la confusion en mettant en évidence les différences de granularité entre deux de ces ressources.
Comprendre les différences
L'article intitulé « Lois de la réflexion » se concentre sur les des détails de bas niveau sur la façon dont les objets sont examinés à l’aide de la réflexion. Il explique qu'une valeur d'interface contient une paire (valeur, type). Par exemple, la variable r dans le code suivant est décrite comme ayant la paire (tty, *os.File) :
<code class="go">var r io.Reader tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0) if err != nil { return nil, err } r = tty</code>
D'autre part, le deuxième article examine les propriétés de répartition dynamique des interfaces. Il explique que le runtime résout les méthodes d'interface en fonction d'un "itable" associé à l'implémentation de l'interface. Par exemple, dans le diagramme d'une interface Stringer contenant un type Binary, l'itable répertorie les méthodes utilisées pour satisfaire l'interface (String), mais pas les méthodes supplémentaires implémentées par le type Binary.
Réconciliation des Différences
Ces deux ressources discutent du même concept à différents niveaux d'abstraction. Le premier traite de la mise en œuvre de la réflexion, tandis que le second se concentre sur le comportement à l'exécution.
Au moment de l'exécution, une interface agit comme un « objet wrapper » qui fournit des informations sur l'objet encapsulé pour faciliter la répartition dynamique. Cela explique pourquoi l'appel de Read sur r dans le premier exemple fonctionne : il utilise l'itable pour localiser l'implémentation de la fonction Read dans le type *os.File.
En résumé, comprenez les interfaces comme des "objets wrapper" d'exécution qui fournissent informations pour une répartition dynamique. La réflexion en fournit une représentation de niveau supérieur sous la forme d'une paire (valeur, type).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!