Golang: Strukturen mit spezifischen Implementierungen scannen
In Go kann die Bearbeitung mehrerer Strukturen mit einer gemeinsamen Schnittstelle eine Herausforderung darstellen. Während es möglich ist, jede Strukturinstanz einzeln zu behandeln, müssen Sie möglicherweise automatisch alle Strukturen finden und bearbeiten, die einer bestimmten Schnittstelle entsprechen.
Das Problem
Das Szenario beinhaltet eine Implementierung einer Schnittstelle I durch mehrere Strukturen (A, B und C). Beim Start der Anwendung müssen Sie die Methode start() für jede A-, B- und C-Instanz aufrufen. Ebenso müssen Sie bei der Beendigung die Methode stop() für diese Instanzen aufrufen. Sie möchten jedoch vermeiden, diese spezifischen Strukturen in Ihrem Code fest zu codieren, um nahtlose Änderungen zu ermöglichen, wenn neue Strukturen eingeführt werden, die die I-Schnittstelle implementieren.
Die Antwort
Leider In Go ist der von Ihnen geplante Ansatz nicht realisierbar. Go ist eine statisch typisierte Sprache und der Linker eliminiert ungenutzte Typdefinitionen und Methoden. Daher werden Typen, auf die in Ihrem Code nicht explizit verwiesen wird, weggelassen.
Alternative Lösung
Ein alternativer Ansatz besteht darin, eine globale Karte (oder einen Slice) zu erstellen, die speichert Instanzen jeder Struktur, die die I-Schnittstelle implementiert. Diese Instanzen können während der Initialisierung mithilfe einer Init-Funktion registriert werden:
<code class="go">var instMap = map[string]StartStopper type A struct {} func init() { instMap["A"] = new(A) }</code>
Während des Startvorgangs können Sie über die Karte iterieren und die Start()-Methode für jede Instanz aufrufen.
Umgang mit mehreren Instanzen
Wenn es mehrere Instanzen jedes Strukturtyps geben kann, müssen Sie Ihren Registrierungsprozess ändern, um Instanzen bei der Erstellung zur Karte hinzuzufügen. Sie sollten Instanzen auch entfernen, wenn sie nicht mehr verwendet werden, um mögliche Speicherlecks zu verhindern.
Das obige ist der detaillierte Inhalt vonWie kann man Strukturen dynamisch scannen und manipulieren, indem man eine bestimmte Schnittstelle in Golang implementiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!