Wie werden Schnittstellen in Go dargestellt?
Verschiedene Ressourcen beschreiben die Darstellung von Schnittstellen in Go, einige mögen jedoch widersprüchlich erscheinen. Dieser Artikel soll die Verwirrung klären, indem er die Unterschiede in der Granularität zwischen zwei solchen Ressourcen hervorhebt.
Die Unterschiede verstehen
Der Artikel mit dem Titel „Gesetze der Reflexion“ konzentriert sich auf die Low-Level-Details darüber, wie Objekte mithilfe von Reflexion untersucht werden. Es erklärt, dass ein Schnittstellenwert ein Paar (Wert, Typ) enthält. Beispielsweise wird die Variable r im folgenden Code so beschrieben, dass sie das Paar (tty, *os.File) aufweist:
<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>
Andererseits untersucht der zweite Artikel die dynamischen Versandeigenschaften von Schnittstellen. Es erklärt, dass die Laufzeit Schnittstellenmethoden basierend auf einem „itable“ auflöst, das mit der Implementierung der Schnittstelle verknüpft ist. Im Diagramm für eine Stringer-Schnittstelle, die einen Binärtyp enthält, listet beispielsweise itable die Methoden auf, die zur Erfüllung der Schnittstelle (String) verwendet werden, jedoch keine zusätzlichen Methoden, die vom Binärtyp implementiert werden.
Abgleichen der Unterschiede
Diese beiden Ressourcen diskutieren dasselbe Konzept auf unterschiedlichen Abstraktionsebenen. Im ersten geht es um die Implementierung der Reflektion, während sich der zweite auf das Laufzeitverhalten konzentriert.
Zur Laufzeit fungiert eine Schnittstelle als „Wrapper-Objekt“, das Informationen über das verpackte Objekt bereitstellt, um den dynamischen Versand zu erleichtern. Dies erklärt, warum der Aufruf von Read auf r im ersten Beispiel funktioniert: Es verwendet itable, um die Implementierung der Read-Funktion im Typ *os.File zu lokalisieren.
Zusammenfassend lässt sich sagen, dass Schnittstellen als Laufzeit-„Wrapper-Objekte“ verstanden werden, die Folgendes bereitstellen Informationen für den dynamischen Versand. Reflection bietet eine Darstellung auf höherer Ebene als (Wert-, Typ-)Paar.
Das obige ist der detaillierte Inhalt vonWie funktionieren Schnittstellen in Go: Reflexion vs. Laufzeitverhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!