idiomatische Implementierung komplexer struktureller Hierarchien in go
go's mangelnder Vererbung und Unterstützung für die Einbleiben, machen die Darstellung komplexer strukturellerhierarchien nicht ständig. Die Verwendung leerer Methoden durch den Go -Compiler in seiner AST -Implementierung hat Fragen zu ihrer Wirksamkeit aufgeworfen.
Verständnis leerer Methoden
Während nicht wesentlicher, dienen leere Methoden zwei Schlüsselabwinde:
type Object Interface { Objekt() } Geben Sie ObjectImpl Struct {} ein func (o *objectImpl) Object () {}
imperienpflichtige Implementierung:
type unbewegliche Schnittstelle { Objekt unbeweglich() } Geben Sie ImmovableImpl Struct {ein Objektimpl // Eingebettete Objektimplementierung } func (i *immovableImpl) immovable () {}
Erstellung von Implementierung:
Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
Type Building Struct { Unbewegliche Implementierung eingebettete Implementierung // zusätzliche bauspezifische Felder }
bewegbare Implementierung:Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
Typ Movable Interface { Objekt beweglich() } Geben Sie MovableImpl Struct {ein Objektimpl // Eingebettete Objektimplementierung } func (m *movableImpl) movable () {}
Auto -Implementierung:Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
type Car struct { MovableImpl // eingebettete bewegliche Implementierung // Zusätzliche autospezifische Felder }
Beispielnutzung:Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
// Erstellen können nicht einer variablen beweglich-typed zugewiesen werden, da sie die bewegliche Schnittstelle nicht implementiert. var Movable Movable = Building {} // Es kann jedoch einer Objekt-Typ-Variablen zugeordnet werden, da sowohl unbewegliche als auch bewegliche Implementierungsobjekte. var Object Object = Erstellen {}
Vorteile der Einbettung:Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
reduzierte Anzahl leerer Methoden, die zu Reinigungsreinigern und mehr direkten Code führen. Implementierung.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3