Comprendre la représentation de l'interface dans Go
Lorsque vous travaillez avec des interfaces dans Go, il est important de comprendre leur représentation sous-jacente. Deux ressources clés éclairent ce sujet, mais leurs perspectives diffèrent.
L'article « Laws of Reflection » (http://blog.golang.org/laws-of-reflection) introduit le concept d'interface contenant une paire (valeur, type), comme le montre l'exemple de r io.Reader. Cette paire inclut la valeur tty et son type *os.File.
Alternativement, l'autre article souligne que les interfaces ne contiennent que des méthodes pour satisfaire la spécification de l'interface. Dans l'exemple de Stringer contenant le type Binary, l'itable (table des méthodes d'interface) répertorie uniquement les méthodes nécessaires à l'implémentation de String, à l'exclusion des autres méthodes définies sur le type Binary.
Pour concilier ces perspectives, considérons les interfaces dans Go en tant qu'"objets wrapper" au moment de l'exécution. Ils fournissent des informations sur un autre objet, l'itable, qui guide le runtime dans l'exécution des méthodes sur l'objet encapsulé. Par exemple, lors de l'appel de Read sur r, le runtime utilise l'itable pour accéder à la fonction correspondante dans la disposition du type os.File.
La réflexion, telle que décrite dans l'article « Lois de la réflexion », fournit une méthode pratique moyen d'explorer cette représentation en exposant la paire (valeur, type) via les méthodes réflexion.ValueOf et réflexion.TypeOf.
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!