Beim Entwerfen einer Strukturhierarchie bietet Go zwei Ansätze zum Organisieren von Typbeziehungen: Einbettung und Schnittstellen mit Leer Methoden.
Gos „leerer Methoden“-Ansatz verwendet Schnittstellen und leere Methoden, um Typhierarchien darzustellen. Eine leere Methode ist eine Methode, die keine Implementierung hat; Sein Zweck besteht lediglich darin, zu markieren, dass ein Typ eine Schnittstelle erfüllt.
Im bereitgestellten Beispiel, in dem die Typen Object, Immovable, Building, Movable, Car und Bike eine Hierarchie bilden, verwendet die folgende Implementierung Schnittstellen mit leer Methoden würden als idiomatisch gelten:
type Object interface { object() } type Immovable interface { Object immovable() } type Building struct { ... } type Mountain struct { ... } type Movable interface { Object movable() } type Car struct { ... } type Mountain struct { ... } func (*Building) object() {} func (*Mountain) object() {} func (*Car) object() {} func (*Bike) object() {} func (*Building) immovable() {} func (*Mountain) immovable() {} func (*Car) movable() {} func (*Bike) movable() {}
Diese Methode dokumentiert explizit die Typbeziehungen und verhindert die Zuweisung von inkompatiblen Typen.
Go unterstützt auch die Einbettung, die es einer Struktur ermöglicht, die Methoden einer anderen Struktur zu erben. Mithilfe der Einbettung könnte die Hierarchie wie folgt dargestellt werden:
type ObjectImpl struct {} func (o *ObjectImpl) object() {} type ImmovableImpl struct { *ObjectImpl // Embed ObjectImpl struct } func (o *Immovable) immovable() {} type Building struct { *ImmovableImpl // Embed ImmovableImpl struct } type MovableImpl struct { *ObjectImpl // Embed ObjectImpl struct } func (o *Movable) movable() {} type Car struct { *MovableImpl // Embed MovableImpl struct } type Bike struct { *MovableImpl // Embed MovableImpl struct }
Einbettung bietet einen alternativen Ansatz, der die Anzahl leerer Methoden reduziert, indem er den vererbungsähnlichen Mechanismus von Go nutzt.
Das obige ist der detaillierte Inhalt vonWie erstelle ich mithilfe von Einbettungen oder leeren Schnittstellen idiomatisch eine komplexe Strukturhierarchie in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!