Wie werden Schnittstellen in Go implementiert?
Bei der Untersuchung von Schnittstellen in Go können unterschiedliche Perspektiven zu scheinbar gegensätzlichen Verständnissen führen.
Schemadarstellung
Im Artikel „Gesetze der Reflexion“ enthält ein Schnittstellenwert ein (Wert-, Typ-)Paar. Wenn Sie beispielsweise io.Reader der Variablen r zuweisen, erhalten Sie r = (tty, *os.File). Hier ist tty der Wert, während *os.File den Typ des zugrunde liegenden Werts darstellt. Trotz der Schnittstellenbeschränkung auf die Read-Methode behält der innere Wert seine vollständigen Typinformationen.
Dynamic Dispatch
Umgekehrt heißt es in einem anderen Artikel, dass itable für einen Typ implementiert wird spezifische Schnittstellenmethoden. Im Fall des Binärtyps, der Stringer implementiert, enthält seine itable nur die String-Methode. Dies impliziert, dass die Itable den statischen Typ des Schnittstellenwerts widerspiegeln sollte, im Gegensatz zum Typ des zugrunde liegenden Werts.
Klarstellung
Diese beiden Perspektiven ergänzen einander. „Laws of Reflection“ untersucht Schnittstellenwerte, wie sie durch Reflexion gesehen werden, und bietet eine vereinfachte Darstellung. Der zweite Artikel konzentriert sich auf den dynamischen Versandmechanismus, der Schnittstellen zugrunde liegt, und zeigt die Beteiligung spezifischer Implementierungsmethoden auf.
Die Variable r enthält tatsächlich tty als Wert und hat den statischen Typ io.Reader, bei dem es sich um eine Wrapper-Schnittstelle handelt Bereitstellung des Zugriffs auf die Read-Methode. Der zugrunde liegende Wert tty behält jedoch seinen Typ als *os.File, einschließlich zusätzlicher Methoden über Read hinaus.
In Go werden Schnittstellen durch dynamischen Versand implementiert, wobei die Laufzeit basierend auf dem Konkreten entscheidet, welche Methodenimplementierung aufgerufen werden soll Typ des umschlossenen Werts. Die itable speichert die Implementierungsdetails für jede Schnittstellenmethode.
Das obige ist der detaillierte Inhalt von## Wie werden Schnittstellen in Go implementiert: statischer Typ oder dynamischer Versand?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!