Wie erkennt man dynamisch Instanzen, die eine Go-Schnittstelle zur Laufzeit implementieren?

Susan Sarandon
Freigeben: 2024-10-29 05:51:31
Original
354 Leute haben es durchsucht

 How to Dynamically Discover Instances Implementing a Go Interface at Runtime?

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:

  • Schnittstelle I definiert zwei Methoden: start() und stop().
  • Mehrere Strukturen (A, B und C) implementieren Schnittstelle I.
  • Während des Programmstarts start() sollte auf allen Instanzen von A, B und C aufgerufen werden.
  • Ebenso sollte stop() während der Programmbeendigung auf diesen Instanzen aufgerufen werden.
  • Um die dynamische Erkennung zu erleichtern, Es wird bevorzugt, die Strukturnamen im Code nicht hart zu codieren.

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage