Heim >Backend-Entwicklung >Golang >Können Sie dynamisch alle Strukturen finden, die eine Schnittstelle in Go implementieren?

Können Sie dynamisch alle Strukturen finden, die eine Schnittstelle in Go implementieren?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 04:31:29961Durchsuche

 Can You Dynamically Find All Structs Implementing an Interface in Go?

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!

Stellungnahme:
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