Frage:
Ist es in Golang möglich, alle programmgesteuert zu identifizieren? Strukturen, die eine bestimmte Schnittstelle implementieren? Dies würde eine automatische Initialisierung und Beendigung dieser Strukturen zur Laufzeit ermöglichen, ohne ihre Namen im Code fest zu codieren.
Antwort:
Leider lautet die kurze Antwort nein.
Erklärung:
Golang ist eine streng typisierte Sprache, was bedeutet, dass der Linker Typdefinitionen, Methoden und Funktionen entfernen kann, die von der Anwendung nicht verwendet werden. Daher wird ein Typ (z. B. Struktur A), sofern er nicht irgendwo im Code referenziert und verwendet wird, nicht in die kompilierte Binärdatei aufgenommen.
Darüber hinaus ist auch der Zugriff auf aktuell vorhandene Instanzen von Typen, die eine bestimmte Schnittstelle implementieren, nicht möglich nicht machbar.
Alternativer Ansatz:
Um die gewünschte Funktionalität zu erreichen, besteht ein alternativer Ansatz darin, eine globale Karte oder einen globalen Slice zu erstellen, der Instanzen von Strukturen speichert, die das implementieren Schnittstelle. Jede Struktur kann dann mithilfe einer Init-Funktion, die beim Anwendungsstart automatisch aufgerufen wird, eine Instanz zu dieser Karte hinzufügen. Bei Bedarf kann die Anwendung dann die Karte durchlaufen und die gewünschten Methoden für die Instanzen aufrufen.
Dieser Ansatz ermöglicht die dynamische Registrierung von Strukturen und macht eine harte Codierung ihrer Namen im Code überflüssig. Wenn es jedoch mehrere Instanzen eines bestimmten Typs gibt, müssen zusätzliche Mechanismen implementiert werden, um deren Registrierung und Abmeldung zu verwalten.
Das obige ist der detaillierte Inhalt vonGibt es eine Möglichkeit, alle Implementierungen einer Schnittstelle in Golang programmgesteuert zu finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!