Golang: Instanzen erkennen, die eine Schnittstelle implementieren
In Golang ist es oft wünschenswert, Operationen an Instanzen eines bestimmten Typs oder solchen, die eine Schnittstelle implementieren, durchzuführen eine bestimmte Schnittstelle. Die strikte Typisierung der Sprache stellt jedoch eine Herausforderung dar, alle Instanzen zu identifizieren, die ein bestimmtes Kriterium zur Laufzeit erfüllen.
Problemübersicht
Betrachten Sie den folgenden Anwendungsfall:
Lösungsdiskussion
Das Typsystem von Golang ermöglicht nicht den Laufzeitabruf aller Typen, die eine Schnittstelle implementieren. Dies liegt daran, dass Go statisch typisiert ist und der Compiler ungenutzte Typen und Methoden eliminiert, um die resultierende Binärdatei zu optimieren.
Alternativer Ansatz
Eine alternative Lösung besteht darin, einen globalen Ansatz beizubehalten Karte oder Slice, die Instanzen, die die Schnittstelle implementieren, einen Bezeichner zuordnet. Jede Struktur kann sich selbst initialisieren, indem sie dieser globalen Sammlung eine Instanz hinzufügt.
Zum Beispiel:
<code class="go">var instMap = map[string]StartStopper type A struct {} func init() { instMap["A"] = new(A) }</code>
Während des Starts und der Beendigung kann das Programm über die globale Sammlung iterieren und die entsprechenden Methoden aufrufen auf jeder Instanz.
Erweiterung für mehrere Instanzen
Wenn mehrere Instanzen jedes Typs vorhanden sein können, muss die globale Sammlung jedes Mal aktualisiert werden, wenn eine neue Instanz erstellt und entfernt wird es wird nicht mehr verwendet. Dies stellt eine ordnungsgemäße Handhabung durch den Müllsammler sicher.
Das obige ist der detaillierte Inhalt vonWie erkennt man dynamisch Instanzen, die eine Go-Schnittstelle zur Laufzeit implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!