Heim >Backend-Entwicklung >Golang >Können Sie dynamisch alle Strukturen finden, die eine Schnittstelle in Go implementieren?
Nach Strukturen suchen, die eine Schnittstelle in Go implementieren
Hintergrund:
In Go können wir auf Szenarien stoßen wo wir dynamisch auf mehrere Strukturen zugreifen müssen, die eine gemeinsame Schnittstelle implementieren. Da Go jedoch eine statisch typisierte Sprache ist, bietet es keinen integrierten Mechanismus zum Scannen nach allen Strukturen eines bestimmten Schnittstellentyps.
Frage:
Gegeben eine Ist es bei einer Schnittstelle mit den Methoden start() und stop() möglich, eine Liste aller Strukturen abzurufen, die diese Schnittstelle implementieren? Diese Informationen würden es uns ermöglichen, start() und stop() auf allen Instanzen der implementierten Strukturen dynamisch aufzurufen.
Antwort:
Leider nein, Dies ist nicht direkt möglich. Durch die statische Typisierung von Go werden nicht verwendete Typdefinitionen eliminiert, was den Zugriff auf Strukturen erschwert, die nicht explizit in der Anwendung verwendet wurden.
Alternativer Ansatz:
Anstatt dynamisch nach Strukturen zu suchen, wird ein Eine alternative Lösung besteht darin, eine globale Karte oder ein globales Segment zu erstellen. Jede Struktur, die die Schnittstelle implementiert, kann dann während der Anwendungsinitialisierung mithilfe einer init()-Funktion eine Instanz zu dieser Karte hinzufügen. Dadurch wird sichergestellt, dass alle Instanzen der verschiedenen Strukturen zugänglich sind und zentral verwaltet werden können.
Beispiel:
<code class="go">var instMap = map[string]StartStopper type A struct {} func init() { instMap["A"] = new(A) }</code>
Durch Iteration über diese Karte können wir dynamisch aufrufen die start()-Methode für alle registrierten Instanzen.
Überlegungen für mehrere Instanzen:
Wenn mehrere Instanzen jedes Typs vorhanden sein können, müssen Sie Instanzen manuell zur Karte hinzufügen wann immer sie erstellt werden. Darüber hinaus sollten Sie Instanzen von der Karte entfernen, wenn sie nicht mehr benötigt werden, um zu verhindern, dass der Garbage Collector sie ignoriert.
Das obige ist der detaillierte Inhalt vonKönnen Sie dynamisch alle Strukturen finden, die eine Schnittstelle in Go implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!