Gos Ansatz zur Darstellung hierarchischer Beziehungen zwischen Strukturen, beispielhaft dargestellt durch die AST-Implementierung des Go-Compilers dreht sich um die Verwendung von Schnittstellen mit leeren Methoden. Dies wirft die Frage auf, ob diese Methode wirklich idiomatisch und unkompliziert ist.
Leere Methoden für die Schnittstellenimplementierung
Gos Schnittstellen sind Sätze von Methodensignaturen. Durch das Hinzufügen leerer Methoden zu einer Schnittstelle wird die Absicht, diese Schnittstelle zu implementieren, ausdrücklich zum Ausdruck gebracht. Dies ist besonders nützlich für Typen, die die Schnittstelle aufgrund eines kompatiblen Methodensatzes nicht implizit implementieren.
Erzwingen eindeutiger Typunterscheidungen
Leere Methoden spielen dabei eine wichtige Rolle Differenzierung von Typen innerhalb von Hierarchien. Wenn beispielsweise Immovable und Movable denselben Methodensatz verwenden würden, könnte ein Objekt eines Typs einer Variablen des anderen Typs zugewiesen werden, was die beabsichtigte Unterscheidung verletzt. Durch das Hinzufügen eindeutiger leerer Methoden zu jeder Schnittstelle wird diese Zuweisung verhindert.
Reduzierung leerer Methoden mit eingebetteten Strukturen
Leere Methoden können zwar ihren Zweck erfüllen, aber auch führen zu einer Verbreitung solcher Methoden. Um dieses Problem zu lösen, ist es möglich, benutzerdefinierte Strukturimplementierungen zu definieren und diese ineinander einzubetten. Dadurch können die Methoden übergeordneter Implementierungen „vererbt“ werden, wodurch der Bedarf an leeren Methoden verringert wird.
Beispielimplementierung
Anhand der Beispielhierarchie erstellen wir eine Strukturimplementierung für jeden Typ:
<br>Typ ObjectImpl-Struktur {}</p> <p>func (o *ObjectImpl) object() {}</p> <p>type ImmovableImpl struct {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">ObjectImpl
}
func (o *Immovable ) immovable() {}
Typ Gebäudestruktur {
ImmovableImpl
}
Hier wird Building automatisch zu einem unbeweglichen Objekt, da es die ImmovableImpl-Struktur einbettet.
Fazit
Die Verwendung leerer Methoden in der AST-Hierarchie von Go ist eine Frage Dies ist keine Konvention, sondern dient dazu, die Notwendigkeit einer expliziten Schnittstellenimplementierung und Typunterscheidung hervorzuheben. Während eingebettete Strukturen die Anzahl leerer Methoden reduzieren können, hängt die Wahl des Ansatzes von den spezifischen Anforderungen und Vorlieben des Entwicklers ab.
Das obige ist der detaillierte Inhalt vonWie können wir in Go idiomatisch komplexe Strukturhierarchien erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!