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 contiennent uniquement 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érez 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, comme décrit 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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3