Heim > Backend-Entwicklung > Golang > Wie erstelle ich mithilfe von Einbettungen oder leeren Schnittstellen idiomatisch eine komplexe Strukturhierarchie in Go?

Wie erstelle ich mithilfe von Einbettungen oder leeren Schnittstellen idiomatisch eine komplexe Strukturhierarchie in Go?

Susan Sarandon
Freigeben: 2025-01-01 14:42:12
Original
227 Leute haben es durchsucht

How to Idiomatically Create a Complex Hierarchy of Structs in Go Using Embedding or Empty Interfaces?

Idiomatischer Weg zum Erstellen einer komplexen Strukturhierarchie in Go

Beim Entwerfen einer Strukturhierarchie bietet Go zwei Ansätze zum Organisieren von Typbeziehungen: Einbettung und Schnittstellen mit Leer Methoden.

Schnittstelle mit leeren 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() {}
Nach dem Login kopieren

Diese Methode dokumentiert explizit die Typbeziehungen und verhindert die Zuweisung von inkompatiblen Typen.

Einbettung

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage